文章目录
- 基础
- 创建数据库管理对象
- 定义自己的模型
- 连接数据库并创建表
- 插入数据
- 查询数据
- 更新数据
- 删除数据
- 进阶
- 复合主键模型示例
- 复杂查询示例(以Relation模型为例)
基础
创建数据库管理对象
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 = dbprimary_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
) 差值起的别名