目录
Peewee:轻量级 Python ORM 框架全面解析
在现代 Web 开发或数据应用中,ORM(对象关系映射)极大地简化了数据库操作。对于 Python 开发者来说,Django ORM 和 SQLAlchemy 可能耳熟能详,而 Peewee 则是一个兼具 轻量、易用、高效 的 ORM 框架,尤其适合中小项目、嵌入式系统或脚本自动化使用。
一、什么是 Peewee?
Peewee 是一个用于 Python 的 ORM 框架,它支持多种数据库(如 SQLite、PostgreSQL、MySQL 等),主打“简单而强大”的设计哲学。
特点如下:
-
✅ API 直观、易学
-
✅ 支持模型定义、查询构造、关系管理等全套功能
-
✅ 支持事务、连接池、原生 SQL 执行
-
✅ 开箱即用,依赖极少
官网地址:https://docs.peewee-orm.com
二、快速入门示例
1. 安装
pip install peewee
2. 定义模型
from peewee import *
db = SqliteDatabase('my_app.db') # 支持 MySQLDatabase、PostgresqlDatabase 等
class BaseModel(Model):
class Meta:
database = db
class User(BaseModel):
username = CharField(unique=True)
is_active = BooleanField(default=True)
3. 初始化数据库
db.connect()
db.create_tables([User])
4. 数据增删查改
# 新增
user = User.create(username='alice')
# 查询
user = User.get(User.username == 'alice')
# 更新
user.is_active = False
user.save()
# 删除
user.delete_instance()
三、进阶用法
1. 一对多关系
class Tweet(BaseModel):
user = ForeignKeyField(User, backref='tweets')
content = TextField()
timestamp = DateTimeField()
2. 查询构造器
# 查询所有活跃用户
active_users = User.select().where(User.is_active == True)
# 查询 tweet 内容包含 'hello' 的记录
tweets = Tweet.select().where(Tweet.content.contains('hello'))
3. 事务处理
with db.atomic():
User.create(username='bob')
Tweet.create(user=user, content='first tweet', timestamp=datetime.now())
四、与 SQLAlchemy 的对比
特性 | Peewee | SQLAlchemy |
---|---|---|
学习曲线 | 平缓 | 陡峭 |
依赖 | 少 | 多 |
查询表达式 | 简洁 | 更灵活 |
关系管理 | 支持 | 支持 |
性能 | 高 | 高 |
使用场景 | 中小项目 | 中大型系统 |
五、适用场景
-
CLI 工具、脚本中对 SQLite 的快速操作
-
嵌入式系统(如树莓派)中的数据库模块
-
资源受限场景中的轻量级 Web 应用
-
学习 ORM 概念时的入门选择
六、总结
Peewee 是一个真正“够用、好用、易用”的 ORM 框架。它让开发者可以专注于业务逻辑而非 SQL 拼接。如果你正在寻找一个介于 “手写 SQL” 和 “重量级 ORM” 之间的平衡方案,不妨试试 Peewee。