peewee入门

1.安装
        注意要安装pymysql,不然执行的时候会报没有数据库驱动

# 安装peewee库
pip install peewee
# 安装mysql数据库客户端
pip install pymysql

2.自动创建类

#python -m pwiz自动生成类,-H IP地址,-p端口号,-u 用户,-P密码(不填),-e 数据库引擎 , 库名放所有参数后面,> XX.py 结果放在XX.py中
python -m pwiz -H 101.34.221.219 -p 13306 -u dev -P -e mysql beifan_db > mdeols.py

执行后,会让输入数据库连接密码,而后会在cmd启动的所在目录下生成一个model.py文件。

注意:刚生成的model.py文件编码可能与系统不同,例如我显示是UTF-16LE编码,需要转换为与项目其他.py文件相同的编码。

在这里插入图片描述
在这里插入图片描述

3.查询
查询所有用户
# 查询所有用户
users = User.select()

# 看看有多少条数据
print(len(users))

# 查看第0条数据的主键值
print(users[0])

# 查看所有数据
for user in users:
    print(user)  # 每个user都是User模型对象 这里print会输出主键值
    print(user, user.name, user.age, user.email)

查询特定属性
users = User.select(User.name, User.age)
for user in users:
    print(user.name, user.age)

条件查询
# 使用where实现条件查询

read_num: Model=Article.select().where(Article.read_num<10)
for num in read_num:
    print(num,num.read_num)

查询单个用户
# 使用get 直接返回一个User对象(多条数据只返回第一条)
num = Article.get(Article.read_num == 0)
print(num,num.read_num)

根据主键查询
# get_by_id()方法
user = User.get_by_id(3)
print(user.name)


多条件、排序、LIMIT
SELECT `t1`.`title`, `t1`.`read_num` FROM `article` AS `t1` WHERE ((`t1`.`exam_province` = '河北') AND (`t1`.`read_num` < 100)) ORDER BY `t1`.`read_num` DESC LIMIT 5
转换为:
num = Article.select(Article.title, Article.read_num).where((Article.exam_province=='河北')&(Article.read_num<100)).order_by(Article.read_num.desc()).limit(5)
for n in num:
    print(n.title, n.read_num)


子查询示例
SELECT `t1`.`id`, `t1`.`article`, `t1`.`cover`, `t1`.`exam_province`, `t1`.`follow_num`, `t1`.`read_num`, `t1`.`title`, `t1`.`update_time` FROM `article` AS `t1` WHERE (`t1`.`exam_province` NOT IN (SELECT `t2`.`province` FROM `batch_list` AS `t2`))
转换:

inner_query = BatchList.select(BatchList.province)
query = Article.select().where(Article.exam_province.not_in(inner_query))


4.2 新增
# 会在数据库新增数据 同时也会返回这个新对象
user = User.create(name="王五", age=28, email=None)
print(user.name)

4.3 更新
# 注意最后要加execute()
User.update(email='xxx@qq.com').where(User.name == '王五').execute()

4.4 删除
# 条件删除
User.delete().where(User.name == '张三').execute()

# 按照id删除 不需要execute()
User.delete_by_id(2)

更新和删除操作,往往要在最后加execute()。

05 事务
使用atomic装饰器实现原子操作:

# 创建数据库连接
database = MySQLDatabase(...)

# 在方法上使用装饰器来保证原子操作 注意这里的()符号不能省略
@database.atomic()
def func():
    User.update(age=20).where(User.name == "张三").execute()
    User.update(age=21).where(User.name == "李四").execute()
   
# 结束后关闭连接
database.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值