Python ORM 选型:SQLAlchemy vs Tortoise-ORM vs Peewee

Python 的 ORM 生态比较分散,没有像 Rails ActiveRecord 那样一统天下的选择。这篇文章对比一下我用过的几个。 SQLAlchemy:工业级首选 SQLAlchemy 是 Python 生态里最成熟、功能最强的 ORM,分两层: Core:SQL 表达式语言,接近裸 SQL ORM:高级对象映射层 from sqlalchemy import create_engine, Column, Integer, String, ForeignKey from sqlalchemy.orm import DeclarativeBase, relationship, Session engine = create_engine("mysql+pymysql://user:pass@localhost/mydb") class Base(DeclarativeBase): pass class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True) name = Column(String(50), nullable=False) email = Column(String(100), unique=True) orders = relationship("Order", back_populates="user") class Order(Base): __tablename__ = "orders" id = Column(Integer, primary_key=True) user_id = Column(Integer, ForeignKey("users.id")) total = Column(Integer) user = relationship("User", back_populates="orders") # 查询 with Session(engine) as session: users = session.query(User).filter(User.name.like("K%")).all() # 预加载关联数据(避免 N+1 问题) from sqlalchemy.orm import selectinload users = session.query(User).options(selectinload(User.orders)).all() SQLAlchemy 2.0 新语法(推荐): from sqlalchemy import select with Session(engine) as session: stmt = select(User).where(User.name.like("K%")) users = session.execute(stmt).scalars().all() 优点:功能极强,支持复杂查询,文档完善,生态成熟。 缺点:学习曲线陡,概念多(Session、Unit of Work、lazy loading……)。 Tortoise-ORM:异步场景的选择 专为 asyncio 设计,和 FastAPI 配合很顺手: ...

2022-07-19 · 2 min · Kada Liao