Peewee:Python 简便强大的 ORM 框架

打印 上一主题 下一主题

主题 909|帖子 909|积分 2727

在 Python 的开发世界中,数据库操纵是至关告急的一环。
今天先容的 Peewee 作为一款简便且功能强大的 ORM(对象关系映射)框架,为开发者提供了高效便捷的数据库交互方式。
1. Peewee概述

Peewee 是一个简朴小巧的 ORM,它的概念简便明了,易于学习和使用。
能够与 SQLite、MySQL、MariaDB、PostgreSQL 等多种数据库协同工作,拥有丰富的扩展功能,其源代码托管于 GitHub-peewee
使用过Python的都知道,SQLAlchemy几乎已经是Python中的标准ORM框架了,功能强大,
为什么还要使用Peewee呢?
首先,Peewee 设计更为简便,其 API 简朴直观,学习曲线平缓,新手能快速上手,而 SQLAlchemy 相对复杂,必要耗费更多时间去掌握。
其次,Peewee 代码量较少,在一些简朴项目中,其轻量级的特点能使项目结构更清晰,开发效率更高。
例如在小型数据库应用场景下,Peewee 能快速搭建起数据操纵模块。
再者,Peewee 的性能在特定场景下表现出色,如对 SQLite 数据库的操纵,其资源占用相对较低,能为应用带来更好的运行效果。
总之,假如项目规模不大,大概做一些小工具,那么Peewee 会更加趁手。
2. 快速上手

2.1. 初始化数据库

针对差别的数据库范例,有相应的初始化方式。
下面我们选择使用SQLite:
  1. from peewee import SqliteDatabase
  2. db = SqliteDatabase('my_database.db')
复制代码
2.2. 模型界说

在 Peewee 中,通过界说类来创建模型,类的属性对应数据库表中的字段。例如:
  1. from peewee import Model, CharField, IntegerField
  2. class User(Model):
  3.     class Meta:
  4.         database = db
  5.     username = CharField(unique=True)
  6.     age = IntegerField()
复制代码
2.3. 创建数据库和表

毗连数据库,然后就可通过SqliteDatabase来创建表。
  1. if __name__ == "__main__":
  2.     db.connect()
  3.     db.create_tables([User])
复制代码
执行之后,就会发现创建了sqlite数据库和表。
  1. $  sqlite3.exe .\my_database.db
  2. SQLite version 3.45.3 2024-04-15 13:34:05 (UTF-16 console I/O)
  3. Enter ".help" for usage hints.
  4. sqlite> .tables
  5. user
复制代码
db.create_tables反复执行也没关系,假如表已经存在,不会重复创建。
2.4. 数据存储与检索

存储数据时,先创建模型实例并赋值,然后调用 save 方法即可将数据生存到数据库。
  1. if __name__ == "__main__":
  2.     user = User(username="Harry", age=23)
  3.     user.save()
复制代码
运行之后,查询数据库,发现数据已经写入了数据库。
  1. sqlite> select * from user;
  2. ┌────┬──────────┬─────┐
  3. │ id │ username │ age │
  4. ├────┼──────────┼─────┤
  5. │ 1  │ Harry    │ 23  │
  6. └────┴──────────┴─────┘
复制代码
检索数据可以使用各种查询方法。如获取单个记录:
  1. user = User.get(User.username == "Harry")
  2. print(f"name: {user.username}, age: {user.age}")
  3. # 运行结果:
  4. # name: Harry, age: 23
复制代码
2.5. 更新记录

更新记录,比如将上面的年事改为30。
  1. User.update(age=30).where(User.username == 'Harry').execute()
复制代码
运行之后:
  1. sqlite> select * from user;
  2. ┌────┬──────────┬─────┐
  3. │ id │ username │ age │
  4. ├────┼──────────┼─────┤
  5. │ 1  │ Harry    │ 30  │
  6. └────┴──────────┴─────┘
复制代码
2.6. 删除记录

删除记录也很简朴:
  1. User.delete().where(User.username == 'Harry').execute()
复制代码
运行之后:
  1. sqlite> select * from user;
  2. sqlite> select count(1) from user;
  3. ┌──────────┐
  4. │ count(1) │
  5. ├──────────┤
  6. │ 0        │
  7. └──────────┘
复制代码
3. 高级查询功能

高级的查询功能包罗多条件过滤,排序以及分页查询等等。
3.1. 批量插入数据

为了演示高级查询功能,先批量插入一批数据。
  1. User.insert_many(users, fields=[User.username, User.age]).execute()
复制代码
运行结果:
  1. sqlite> select * from user;
  2. ┌────┬──────────┬─────┐
  3. │ id │ username │ age │
  4. ├────┼──────────┼─────┤
  5. │ 1  │ harry    │ 23  │
  6. │ 2  │ lily     │ 20  │
  7. │ 3  │ tom      │ 35  │
  8. │ 4  │ jerry    │ 12  │
  9. │ 5  │ kate     │ 42  │
  10. └────┴──────────┴─────┘
复制代码
3.2. 多条件查询

多个条件的交集,比如id>2而且age>30的数据:
  1. users = User.select().where((User.id > 2) & (User.age > 30)).execute()
  2. print("满足条件的用户:")
  3. for u in users:
  4.     print(f"{u.username}: {u.age}")
复制代码
运行结果:
  1. $  python.exe .\main.py
  2. 满足条件的用户:
  3. tom: 35
  4. kate: 42
复制代码
多个条件的并集,比如id>4大概age>20的数据:
  1. users = User.select().where((User.id > 4) | (User.age > 20)).execute()
复制代码
运行结果:
  1. $  python.exe .\main.py
  2. 满足条件的用户:
  3. harry: 23
  4. tom: 35
  5. kate: 42
复制代码
3.3. 排序

按照年事增长排序:
  1. users = User.select().order_by(User.age)
复制代码
运行结果:
  1. $  python.exe .\main.py
  2. 按照年龄增长排序:
  3. jerry: 12
  4. lily: 20
  5. harry: 23
  6. tom: 35
  7. kate: 42
复制代码
按照年事减少方向排序:
  1. users = User.select().order_by(User.age.desc())
复制代码
运行结果:
  1. $  python.exe .\main.py
  2. 按照年龄减少排序:
  3. kate: 42
  4. tom: 35
  5. harry: 23
  6. lily: 20
  7. jerry: 12
复制代码
3.4. 分页查询

最后,再来看看分页查询,这在前端展示大规模数据时非常有效。
一般的ORM会通过SQL语句中的limit和offset来实现分页查询,而Peewee直接提供了分页查询的API。
  1. page_number = 1 # 页序号,从1开始
  2. page_size = 3  # 每页数据的数量
  3. users = User.select().paginate(page_number, page_size)
  4. print(f"第{page_number}页数据:")
  5. for u in users:
  6.     print(f"{u.username}: {u.age}")
复制代码
运行结果:
  1. $  python.exe .\main.py
  2. 第1页数据:
  3. harry: 23
  4. lily: 20
  5. tom: 35
复制代码
这样就显示了前3个数据,假如把上面的page_numberg=2,那么会返回剩下的2条数据。
4. 总结

Peewee 还拥有众多扩展,如 Playhouse 提供了更多高级功能,包罗对差别数据库的特定扩展(如 SQLite 的扩展函数)、模型生成工具、数据库迁徙工具、反射功能等,大大增强了 Peewee 的实用性和机动性。
本篇先容的是最基本的使用方法,其他还有多表之间关系的建立和查询,请参考官方的文档。
总之,Peewee 以其简便的语法、丰富的功能和良好的扩展性,成为 Python 开发者在数据库操纵方面的有力工具,无论是小型项目还是大型应用,都能提供高效可靠的数据库交互支持。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表