文章目錄
- 基礎
- 創建數據庫管理對象
- 定義自己的模型
- 連接數據庫并創建表
- 插入數據
- 查詢數據
- 更新數據
- 刪除數據
- 進階
- 復合主鍵模型示例
- 復雜查詢示例(以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
) 差值起的別名