
Python有哪些好用的ORM框架
以下是关于 Python 中常用数据库 ORM(对象关系映射)框架的详细介绍,以及它们的特点、适用场景和对比。
1. Django ORM
简介:Django 框架自带的 ORM,深度集成于 Django 生态,适合全栈 Web 开发。
特点:
声明式模型:通过定义
models.Model
子类自动生成数据库表。自动迁移:内置
makemigrations
和migrate
命令管理数据库变更。查询 API:链式调用(如
filter()
,exclude()
,annotate()
),支持复杂查询。事务支持:通过
transaction.atomic()
管理事务。
优点:开箱即用,与 Django 无缝集成,适合快速开发。
缺点:灵活性较低,脱离 Django 无法独立使用。
适用场景:基于 Django 的 Web 项目。
示例代码:
from django.db import models
class User(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField(unique=True)
# 查询示例
users = User.objects.filter(name__startswith='A')
2. SQLAlchemy
简介:功能强大且灵活的 ORM,支持多种数据库(如 PostgreSQL、MySQL、SQLite 等)。
特点:
双重模式:提供低层 SQL 表达式语言(Core)和高层 ORM。
复杂查询:支持联表查询、子查询、窗口函数等高级 SQL 功能。
异步支持:通过
asyncpg
或aiomysql
实现异步操作(需 SQLAlchemy 1.4+)。会话管理:通过
Session
对象管理事务和对象状态。
优点:灵活、功能全面,适合复杂业务场景。
缺点:学习曲线较高,配置相对复杂。
适用场景:需要复杂查询或非 Django 项目(如 Flask、FastAPI)。
示例代码:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker
Base = declarative_base()
engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
email = Column(String, unique=True)
Base.metadata.create_all(engine)
# 插入数据
session = Session()
user = User(name="Alice", email="alice@example.com")
session.add(user)
session.commit()
3. Peewee
简介:轻量级 ORM,语法简洁,适合小型项目或快速原型开发。
特点:
简洁 API:通过链式方法(如
.where()
,.join()
)构建查询。支持扩展:插件系统支持多种数据库(如 PostgreSQL、MySQL)。
迁移工具:需配合
peewee-migrations
等第三方库使用。
优点:学习成本低,代码简洁。
缺点:功能有限,不适合复杂业务逻辑。
适用场景:小型项目或快速开发。
示例代码:
from peewee import SqliteDatabase, Model, CharField
db = SqliteDatabase('example.db')
class User(Model):
name = CharField()
email = CharField(unique=True)
class Meta:
database = db
db.connect()
db.create_tables([User])
# 查询示例
users = User.select().where(User.name.startswith('A'))
4. Tortoise ORM
简介:专为异步编程设计的 ORM,兼容
asyncio
框架(如 FastAPI)。特点:
异步支持:原生支持
async/await
语法。Django 风格:模型定义类似 Django ORM。
迁移工具:内置
aerich
管理数据库迁移。
优点:适合现代异步应用。
缺点:社区和文档资源较少。
适用场景:基于异步框架(如 FastAPI)的项目。
示例代码:
from tortoise import fields, models
from tortoise.contrib.fastapi import register_tortoise
class User(models.Model):
id = fields.IntField(pk=True)
name = fields.CharField(max_length=100)
email = fields.CharField(max_length=255, unique=True)
# 异步查询示例
async def get_users():
return await User.filter(name__startswith='A')
5. PonyORM
简介:通过 Python 生成器语法编写查询的 ORM。
特点:
独特查询语法:使用 Python 生成器表达式生成 SQL。
自动懒加载:优化数据库访问。
图形化编辑器:内置数据库模型设计工具。
优点:语法直观,适合 Python 开发者。
缺点:社区较小,性能不如 SQLAlchemy。
适用场景:偏好 Pythonic 语法的项目。
示例代码:
from pony.orm import Database, Required, db_session
db = Database('sqlite', 'example.db')
class User(db.Entity):
name = Required(str)
email = Required(str, unique=True)
db.generate_mapping(create_tables=True)
@db_session
def get_users():
return User.select(lambda u: u.name.startswith('A'))
如何选择?
总结
Django 开发者:直接使用 Django ORM。
需要复杂 SQL 或异步支持:选择 SQLAlchemy 或 Tortoise ORM。
小型项目或快速开发:考虑 Peewee。
尝试新语法:PonyORM 提供独特的生成器表达式查询。