Defining models is similar to Django or SQLAlchemy
译文:定义模型类似于Django或SQLAlchemy
文档
- github: https://github.com/coleifer/peewee
- 官方文档:http://docs.peewee-orm.com/
- pypi https://pypi.org/project/peewee/
安装
pip install peewee
定义Model表结构
# —*— coding: utf-8 —*—
from peewee import *
import datetime
# 设置数据库
db = SqliteDatabase("demo.db")
# 基类,设置数据库链接
class BaseModel(Model):
class Meta:
database = db
# 定义数据表
class UserModel(BaseModel):
name = CharField(unique=True)
created_time = DateTimeField(default=datetime.datetime.now)
class Meta:
table_name = 'tb_user'
class TweetModel(BaseModel):
user = ForeignKeyField(UserModel, related_name ="tweets")
message = TextField()
created_date = DateTimeField(default=datetime.datetime.now)
is_published = BooleanField(default=True)
创建数据表
db.connect()
# 创建数据表
# db.create_tables([UserModel], safe=True)
if not UserModel.table_exists():
UserModel.create_table()
db.close()
查询示例
排序
# 单排序
list(UserModel.select().order_by(UserModel.created_time.asc()))
('SELECT "t1"."id", "t1"."name", "t1"."created_time" FROM "tb_user" AS "t1"
ORDER BY "t1"."created_time" ASC', [])
# 多字段排序
list(UserModel.select().order_by(
UserModel.created_time.asc(),
UserModel.id.asc()
))
('SELECT "t1"."id", "t1"."name", "t1"."created_time" FROM "tb_user" AS "t1"
ORDER BY "t1"."created_time" ASC, "t1"."id" ASC', [])
逻辑操作符
操作符意思示例&
AND(User.is_active == True) & (User.is_admin == True)
| (pipe)OR(User.is_admin) | (User.is_superuser)~
NOT (unary negation)~(User.username = datetime.date.today())&
(Tweet.is_published == True))
.count())
print count
# 分页 page 3 (users 41-60)
users = User.select().order_by(User.name).paginate(3, 20)
for user in users:
print user
# 更新
query = User.update(name="西门吹雪").where(User.id==1)
query.execute()
# 删除
query = User.delete().where(User.id==2)
query.execute()
其他常用设置
打印日志
import logging
# 打印日志
logger = logging.getLogger('peewee')
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG)
logger.propagate = False # 不向上传播
python2解决编码问题
# python2解决编码问题
import sys
reload(sys)
sys.setdefaultencoding("utf-8")