Peewee:Python 简洁强大的 ORM 框架

Python 的开发世界中,数据库操作是至关重要的一环。

今天介绍的 Peewee 作为一款简洁且功能强大的 ORM(对象关系映射)框架,为开发者提供了高效便捷的数据库交互方式。

1. Peewee概述

Peewee 是一个简单小巧的 ORM,它的概念简洁明了,易于学习和使用。

能够与 SQLiteMySQLMariaDBPostgreSQL 等多种数据库协同工作,拥有丰富的扩展功能,其源代码托管于 GitHub-peewee

使用过Python的都知道,SQLAlchemy几乎已经是Python中的标准ORM框架了,功能强大,

为什么还要使用Peewee呢?

首先,Peewee 设计更为简洁,其 API 简单直观,学习曲线平缓,新手能快速上手,而 SQLAlchemy 相对复杂,需要花费更多时间去掌握。

其次,Peewee 代码量较少,在一些简单项目中,其轻量级的特点能使项目结构更清晰,开发效率更高。

例如在小型数据库应用场景下,Peewee 能快速搭建起数据操作模块。

再者,Peewee 的性能在特定场景下表现出色,如对 SQLite 数据库的操作,其资源占用相对较低,能为应用带来更好的运行效果。

总之,如果项目规模不大,或者做一些小工具,那么Peewee 会更加趁手。

2. 快速上手

2.1. 初始化数据库

针对不同的数据库类型,有相应的初始化方式。

下面我们选择使用SQLite

python 复制代码
from peewee import SqliteDatabase

db = SqliteDatabase('my_database.db')

2.2. 模型定义

Peewee 中,通过定义类来创建模型,类的属性对应数据库表中的字段。例如:

python 复制代码
from peewee import Model, CharField, IntegerField

class User(Model):
    class Meta:
        database = db

    username = CharField(unique=True)
    age = IntegerField()

2.3. 创建数据库和表

连接数据库,然后就可通过SqliteDatabase来创建表。

python 复制代码
if __name__ == "__main__":
    db.connect()
    db.create_tables([User])

执行之后,就会发现创建了sqlite数据库和表。

python 复制代码
$  sqlite3.exe .\my_database.db
SQLite version 3.45.3 2024-04-15 13:34:05 (UTF-16 console I/O)
Enter ".help" for usage hints.
sqlite> .tables
user

db.create_tables反复执行也没关系,如果表已经存在,不会重复创建。

2.4. 数据存储与检索

存储数据时,先创建模型实例并赋值,然后调用 save 方法即可将数据保存到数据库。

python 复制代码
if __name__ == "__main__":
    user = User(username="Harry", age=23)
    user.save()

运行之后,查询数据库,发现数据已经写入了数据库。

powershell 复制代码
sqlite> select * from user;
┌────┬──────────┬─────┐
│ id │ username │ age │
├────┼──────────┼─────┤
│ 1  │ Harry    │ 23  │
└────┴──────────┴─────┘

检索数据可以使用各种查询方法。如获取单个记录:

powershell 复制代码
user = User.get(User.username == "Harry")
print(f"name: {user.username}, age: {user.age}")

# 运行结果:
# name: Harry, age: 23

2.5. 更新记录

更新记录,比如将上面的年龄改为30。

python 复制代码
User.update(age=30).where(User.username == 'Harry').execute()

运行之后:

powershell 复制代码
sqlite> select * from user;
┌────┬──────────┬─────┐
│ id │ username │ age │
├────┼──────────┼─────┤
│ 1  │ Harry    │ 30  │
└────┴──────────┴─────┘

2.6. 删除记录

删除记录也很简单:

python 复制代码
User.delete().where(User.username == 'Harry').execute()

运行之后:

powershell 复制代码
sqlite> select * from user;
sqlite> select count(1) from user;
┌──────────┐
│ count(1) │
├──────────┤
│ 0        │
└──────────┘

3. 高级查询功能

高级的查询功能包括多条件过滤,排序以及分页查询等等。

3.1. 批量插入数据

为了演示高级查询功能,先批量插入一批数据。

python 复制代码
User.insert_many(users, fields=[User.username, User.age]).execute()

运行结果:

powershell 复制代码
sqlite> select * from user;
┌────┬──────────┬─────┐
│ id │ username │ age │
├────┼──────────┼─────┤
│ 1  │ harry    │ 23  │
│ 2  │ lily     │ 20  │
│ 3  │ tom      │ 35  │
│ 4  │ jerry    │ 12  │
│ 5  │ kate     │ 42  │
└────┴──────────┴─────┘

3.2. 多条件查询

多个条件的交集,比如id>2并且 age>30的数据:

python 复制代码
users = User.select().where((User.id > 2) & (User.age > 30)).execute()

print("满足条件的用户:")
for u in users:
    print(f"{u.username}: {u.age}")

运行结果:

powershell 复制代码
$  python.exe .\main.py
满足条件的用户:
tom: 35
kate: 42

多个条件的并集,比如id>4或者 age>20的数据:

python 复制代码
users = User.select().where((User.id > 4) | (User.age > 20)).execute()

运行结果:

powershell 复制代码
$  python.exe .\main.py
满足条件的用户:
harry: 23
tom: 35
kate: 42

3.3. 排序

按照年龄增长排序:

python 复制代码
users = User.select().order_by(User.age)

运行结果:

powershell 复制代码
$  python.exe .\main.py
按照年龄增长排序:
jerry: 12
lily: 20
harry: 23
tom: 35
kate: 42

按照年龄减少方向排序:

python 复制代码
users = User.select().order_by(User.age.desc())

运行结果:

powershell 复制代码
$  python.exe .\main.py
按照年龄减少排序:
kate: 42
tom: 35
harry: 23
lily: 20
jerry: 12

3.4. 分页查询

最后,再来看看分页查询,这在前端展示大规模数据时非常有用。

一般的ORM会通过SQL语句中的limitoffset来实现分页查询,而Peewee直接提供了分页查询的API。

python 复制代码
page_number = 1 # 页序号,从1开始
page_size = 3  # 每页数据的数量

users = User.select().paginate(page_number, page_size)
print(f"第{page_number}页数据:")
for u in users:
    print(f"{u.username}: {u.age}")

运行结果:

powershell 复制代码
$  python.exe .\main.py
第1页数据:
harry: 23
lily: 20
tom: 35

这样就显示了前3个数据,如果把上面的page_numberg=2,那么会返回剩下的2条数据。

4. 总结

Peewee 还拥有众多扩展,如 Playhouse 提供了更多高级功能,包括对不同数据库的特定扩展(如 SQLite 的扩展函数)、模型生成工具、数据库迁移工具、反射功能等,大大增强了 Peewee 的实用性和灵活性。

本篇介绍的是最基本的使用方法,其他还有多表之间关系的建立和查询,请参考官方的文档。

总之,Peewee 以其简洁的语法、丰富的功能和良好的扩展性,成为 Python 开发者在数据库操作方面的有力工具,无论是小型项目还是大型应用,都能提供高效可靠的数据库交互支持。

相关推荐
卷无止境19 分钟前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境26 分钟前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd12329 分钟前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102161 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb002 小时前
一个项目带你入门AI应用开发01
python
0566462 小时前
Python康复训练——常用标准库
开发语言·python·学习
昆曲之源_娄江河畔2 小时前
Python如何安装flask, pymssql
开发语言·python·flask·pymssql
0566462 小时前
Python康复训练——控制流与函数
开发语言·python·学习
wang_yb2 小时前
用相关性分析消除“冗余特征”
ai·databook
天使day3 小时前
FastAPI快速入门
python·fastapi