前言
pip install peewee
建表
引用旧表
python -m pwiz -e mysql -u root -H localhost --password user > UserModel.py
新建
from playhouse.shortcuts import model_to_dict
from peewee import MySQLDatabase, Model
db = MySQLDatabase("user", user="root", host="0.0.0.0", port="3306", password="root")
class BaseModel(Model):
class Meta:
database = db
def to_dict(self) -> dict:
"""转化为字典"""
return model_to_dict(self)
class UserModel(BaseModel):
class Meta:
table_name = "user"
username = CharField(unique=True)
password = CharField()
isFrozen = BooleanField(default=False)
createTime = DateTimeField()
class UserInfoModel(BaseModel):
class Meta:
table_name = "user_info"
user = ForeignKeyField(UserModel)
nickname = CharField()
email = CharField()
phone = CharField()
class UserPermModel(BaseModel):
class Meta:
table_name = "user_perm"
user = ForeignKeyField(UserModel)
create = BooleanField(default=False)
delete = BooleanField(default=False)
update = BooleanField(default=False)
search = BooleanField(default=False)
if __name__ == '__main__':
pass
操作
事物
with database.atomic() as transaction:
pass
增
user, info, perm = new_user["user"], new_user["info"], new_user["perm"]
user = UserModel(**user)
uid = user.save()
UserInfoModel.create(user=user, **info).save()
UserPermModel.create(user=user, **perm).save()
删
UserModel.get(
UserModel.username == username
).delete_instance(
recursive=True, delete_nullable=True
)
改
UserModel.update(info).where(UserModel.username == username).execute()
查
单表
query_data = UserModel.select(
).where(
UserModel.isFrozen == False
).order_by(
UserModel.createTime.asc()
)
res = [row.to_dict() for row in query_data]
print(query_data)
print(res)
多表
query_data = UserModel.select(
UserModel, UserInfoModel, UserPermModel
).join_from(
UserModel, UserInfoModel
).join_from(
UserModel, UserPermModel
).order_by(
UserModel.id.asc()
).dicts()
res = [row for row in query_data]
print(query_data)
print(res)
query_data = UserModel.select(
UserModel, UserInfoModel, UserPermModel
).join(
UserInfoModel
).switch(
UserModel
).join(
UserPermModel
).order_by(
UserModel.id.asc()
).dicts()
res = [row for row in query_data]
print(query_data)
print(res)