peewee使用

前言

  • 安装(版本:3.15.1)
 pip install peewee 
  • 轻量化的ORM工具

建表

引用旧表

# 指定mysql,用户为root,host为localhost,数据库为user
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

操作

事物

# 装饰器方式
# @db.atomic()

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(
	# 不填内容即所有字段
	# UserModel.username
).where(
	# 筛选条件
	UserModel.isFrozen == False
).order_by(
	# 升序:asc(),降序:desc()
    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)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aiden_SHI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值