您当前的位置: 首页 >  Python

Python:peewee模块ORM基本使用和常用查询示例

彭世瑜 发布时间:2018-04-08 22:05:34 ,浏览量:4

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")
关注
打赏
1688896170
查看更多评论

彭世瑜

暂无认证

  • 4浏览

    0关注

    2727博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.3521s