基础

创建数据库管理对象

from peewee import *

db = MySQLDatabase('test_db', user='root', password='password', host='localhost', port=3306)

定义自己的模型


class User(Model):
    uid = AutoField() # 自增主键
    name = CharField(max_length=20)
    age = IntegerField(default=0)
    address = CharField(null = True) # 允许空

    class Meta:
        # 关联数据库,这是必选的
        database = db

        # 设置 编写和排序规则,这是可选的
        # table_settings = ["DEFAULT CHARSET=utf8mb4", "COLLATE=utf8mb4_unicode_ci"]
        

连接数据库并创建表


# 连接数据库
db.connect()

# 往数据库创建表
db.create_tables([User, MyMeta])

插入数据


# 往数据库插入一条数据
User.create(name = 'yao7777', age = 18)

# 通过字典插入
userInfo = {'name':'yao888', 'age': 28}
User.insert(userInfo).execute()

查询数据


users = User.select() # 获取所有用户信息
for user in users:
    print(user.name, user.age)

users = User.select().where(User.name == 'yao7777') # 条件查询
users = User.select().where(User.name == 'yao7777', User.age == 18) # 多条件查询(AND)

user = User.get_by_id(2) # 如果数据不存在会崩溃
user = User.get_or_none(User.uid == 900) # 如果数据不存在,返回 None
if user:
    print(user.name)
    

更新数据


users = User.select()
user = users[0]

user.age = 28
user.address = '广东广州'
user.save()

删除数据


users = User.select()
user = users[0]
# 删除一条数据
user.delete_instance()

# 删除表和数据
User.drop_table()
# 删除表数据
User.delete().execute()

进阶

复合主键模型示例


class Relation(Model):
    '''
    关联数据
    '''

    rid = IntegerField()
    '''
    仓库 ID
    '''

    mid = IntegerField()
    '''
    数据元 ID
    '''

    star = IntegerField(default = 0)
    '''
    本期 star
    '''

    starPrev = IntegerField(default = 0)
    '''
    上期 star
    '''

    class Meta:
        database = db
        primary_key = CompositeKey('rid', 'mid') # 2个主键
        

复杂查询示例(以Relation模型为例)

查找指定 mid 的所有数据,且排序按照 (star - starPrev) 的差值降序


relation = Relation.select(Relation.rid, Relation.star, (Relation.star - Relation.starPrev).alias('offsetStar')).order_by(SQL('offsetStar').desc()).where(Relation.mid == meta.id)

offsetStar 是给 (star - starPrev) 差值起的别名

数据库断线自动重连

默认情况下Peewee不会自动重连,当数据库重启后,由于没有重连机制,此时Peewee的连接已丢失,操作数据库会导致崩溃。

要启用自动重连机制,要改动一下代码


db = MySQLDatabase('test_db', user='root', password='password', host='localhost', port=3306)

改为

from playhouse.shortcuts import ReconnectMixin

# 断线重连
class ReconnectMySQLDatabase(ReconnectMixin, MySQLDatabase):
    pass

db = ReconnectMySQLDatabase('xxx', user='root', password='你的pwd', host='188.x.x.x', port=3306)


本文由 Harvey 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论