参赛选手#SQLAlchemy 2.0数据库界的工业母机#如果说 Python 数据库领域有一座神庙那供奉的一定是 SQLAlchemy。在经历了漫长的 1.x 时代后2.0 版本的发布标志着它正式拥抱了强类型标注和原生异步。SQLAlchemy 在 GitHub 上拥有 11.7k stars是 python 生态里 ORM 的第一选择。核心哲学Data Mapper数据映射模式。它将内存中的对象与数据库表结构解耦给予开发者极高的操作精度。杀手锏无敌的生态与Alembic迁移工具。槽点学习曲线最陡峭配置略显繁琐。Tortoise ORMDjango 老玩家的温柔乡#如果你习惯了 Django 那套Model.objects.filter()的写法Tortoise 会让你感到前所未有的亲切。这个项目到现在也发展了很长时间了在 GitHub 上有 5.5k stars算是成熟的项目了。核心哲学Active Record领域模型模式。模型本身即包含了数据操作逻辑。杀手锏零学习成本针对 Django 用户。槽点灵活性受限在大规模复杂查询下显得有些吃力。Piccolo来自未来的 Prisma 挑战者#这是一个 GitHub Stars 不算多约 1.9k但设计极其惊艳的小众精品。有点像 TypeScript 生态的 Prisma 和 drizzle 那种感觉。核心哲学现代、轻量、类型安全优先。杀手锏极具现代感的链式语法和自带的 Piccolo Admin。槽点社区生态较小在生产环境遇到 Bug 时可能需要孤军奋战。直接上代码#为了直观对比我们设计一个经典的场景用户User与文章Post的一对多关联查询。建模对比#SQLAlchemy 2.0强制要求类型标注对 IDE 极其友好class User(Base): __tablename__ user id: Mapped[int] mapped_column(primary_keyTrue) name: Mapped[str] mapped_column(String(30)) posts: Mapped[list[Post]] relationship(back_populatesuser)Tortoise则是熟悉的味道几乎 1:1 还原 Django 模型写法。class User(Model): id fields.IntField(pkTrue) name fields.CharField(max_length30)Piccolo简洁到了极致为异步和类型安全而生语法非常现代。模型定义直接继承Tableclass User(Table): name Varchar(length30)CRUD 操作对比#SQLAlchemy (显式 Session 模式):# Create async with async_session() as session: session.add(User(nameGemini)) await session.commit() # Read users (await session.execute(select(User).where(User.name Gemini))).scalars().all()Tortoise (链式 API):如果你怀念 Django 的语法Tortoise 就是为你准备的。模型类自带增删改查方法。# Create await User.create(nameGemini) # Read users await User.filter(nameGemini).all()Piccolo (SQL 风格链式):链式调用语法接近原生 SQL。# Create await User(nameGemini).save() # Read users await User.select().where(User.name Gemini).run()Migration 能力#一个好的 ORM 离不开优秀的 Migration 能力这几个 ORM 都有不错的数据库迁移功能详细对比看以下表格。特性SQLAlchemy (Alembic)Tortoise (Aerich)Piccolo (Built-in)成熟度行业天花板。极其稳定处理复杂场景。较好基于 Alembic 思想实现。优秀原生集成。灵活性支持手动修改迁移脚本逻辑清晰。相对固定复杂修改有时会报错。自动化程度高甚至带图形化。多库支持完美支持多数据库、多 Schema。较弱。一般。核心逻辑alembic revision --autogenerateaerich migratepiccolo migrations newPS据说Alembic是你可以永远信赖的工具虽然初次配置略显复杂但它能处理任何怪异的数据库变更需求。如何选项#为了帮大家快速拍板我整理了这份综合评估表维度SQLAlchemy 2.0Tortoise ORMPiccolo行业地位绝对统治级异步界主流后起之秀迁移工具Alembic (工业级稳健)Aerich (够用)原生内置 (体验极佳)管理后台SQLAdmin (需第三方)社区插件自带 (颜值极高)类型检查⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐项目上限处理复杂 SQL 的天花板适合中小型业务适合独立开发者其他关键考量因素#类型提示 (Type Hinting)#SQLAlchemy 2.0:通过Mapped类型IDE 能实现真正的点选Autocompletion对开发大型项目极其友好。Piccolo:原生类型安全不需要额外的 Mypy 插件。Tortoise:虽然支持但在某些动态查询下类型推导会断掉。性能与速度#SQLAlchemy:经过 20 年优化在大量数据处理时性能非常强劲。Piccolo:使用了极其轻量的底层实现在简单的增删改查上通常比 SQLAlchemy 更快。Tortoise:因为模仿 Django 做了很多层封装性能相对是三者中最慢的虽然在普通应用中感知不强。生态系统#SQLAlchemy:无敌。几乎所有第三方工具Admin、加密、地理空间都会优先支持它。Piccolo:有自己的 Piccolo Admin但其他生态插件较少。避坑指南#关于 Stars 数的迷思千万不要迷信 Stars。Piccolo 虽好但 1.9k Stars 意味着它的生态宽度不足。如果你在做一个涉及千万级资金、或者需要复杂数据库迁移的项目请务必选择SQLAlchemy。它的 11.7k Stars 换来的是你在深夜修 Bug 时能搜索到的成千上万条 StackOverflow 答案。关于 Migration迁移的执念对于 web 项目来说迁移工具的稳定性高于一切。Alembic 虽然配置稍微麻烦点但它处理修改字段类型、多库同步等复杂场景的能力是其他原生工具难以企及的。关于 Admin 的诱惑Piccolo Admin 真的很帅像极了 TypeScript 生态里和 prisma、drizzle 类似的现代工具。但别忘了SQLAlchemy 的丰富生态也有类似的 admin 界面而且 admin 界面只是本地开发时调试使用真正交付还是需要开发真正的管理后台。
后 Django 时代:SQLAlchemy 2.0、Tortoise 与 Piccolo 三大异步 ORM 选型指南
发布时间:2026/7/4 3:31:45
参赛选手#SQLAlchemy 2.0数据库界的工业母机#如果说 Python 数据库领域有一座神庙那供奉的一定是 SQLAlchemy。在经历了漫长的 1.x 时代后2.0 版本的发布标志着它正式拥抱了强类型标注和原生异步。SQLAlchemy 在 GitHub 上拥有 11.7k stars是 python 生态里 ORM 的第一选择。核心哲学Data Mapper数据映射模式。它将内存中的对象与数据库表结构解耦给予开发者极高的操作精度。杀手锏无敌的生态与Alembic迁移工具。槽点学习曲线最陡峭配置略显繁琐。Tortoise ORMDjango 老玩家的温柔乡#如果你习惯了 Django 那套Model.objects.filter()的写法Tortoise 会让你感到前所未有的亲切。这个项目到现在也发展了很长时间了在 GitHub 上有 5.5k stars算是成熟的项目了。核心哲学Active Record领域模型模式。模型本身即包含了数据操作逻辑。杀手锏零学习成本针对 Django 用户。槽点灵活性受限在大规模复杂查询下显得有些吃力。Piccolo来自未来的 Prisma 挑战者#这是一个 GitHub Stars 不算多约 1.9k但设计极其惊艳的小众精品。有点像 TypeScript 生态的 Prisma 和 drizzle 那种感觉。核心哲学现代、轻量、类型安全优先。杀手锏极具现代感的链式语法和自带的 Piccolo Admin。槽点社区生态较小在生产环境遇到 Bug 时可能需要孤军奋战。直接上代码#为了直观对比我们设计一个经典的场景用户User与文章Post的一对多关联查询。建模对比#SQLAlchemy 2.0强制要求类型标注对 IDE 极其友好class User(Base): __tablename__ user id: Mapped[int] mapped_column(primary_keyTrue) name: Mapped[str] mapped_column(String(30)) posts: Mapped[list[Post]] relationship(back_populatesuser)Tortoise则是熟悉的味道几乎 1:1 还原 Django 模型写法。class User(Model): id fields.IntField(pkTrue) name fields.CharField(max_length30)Piccolo简洁到了极致为异步和类型安全而生语法非常现代。模型定义直接继承Tableclass User(Table): name Varchar(length30)CRUD 操作对比#SQLAlchemy (显式 Session 模式):# Create async with async_session() as session: session.add(User(nameGemini)) await session.commit() # Read users (await session.execute(select(User).where(User.name Gemini))).scalars().all()Tortoise (链式 API):如果你怀念 Django 的语法Tortoise 就是为你准备的。模型类自带增删改查方法。# Create await User.create(nameGemini) # Read users await User.filter(nameGemini).all()Piccolo (SQL 风格链式):链式调用语法接近原生 SQL。# Create await User(nameGemini).save() # Read users await User.select().where(User.name Gemini).run()Migration 能力#一个好的 ORM 离不开优秀的 Migration 能力这几个 ORM 都有不错的数据库迁移功能详细对比看以下表格。特性SQLAlchemy (Alembic)Tortoise (Aerich)Piccolo (Built-in)成熟度行业天花板。极其稳定处理复杂场景。较好基于 Alembic 思想实现。优秀原生集成。灵活性支持手动修改迁移脚本逻辑清晰。相对固定复杂修改有时会报错。自动化程度高甚至带图形化。多库支持完美支持多数据库、多 Schema。较弱。一般。核心逻辑alembic revision --autogenerateaerich migratepiccolo migrations newPS据说Alembic是你可以永远信赖的工具虽然初次配置略显复杂但它能处理任何怪异的数据库变更需求。如何选项#为了帮大家快速拍板我整理了这份综合评估表维度SQLAlchemy 2.0Tortoise ORMPiccolo行业地位绝对统治级异步界主流后起之秀迁移工具Alembic (工业级稳健)Aerich (够用)原生内置 (体验极佳)管理后台SQLAdmin (需第三方)社区插件自带 (颜值极高)类型检查⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐项目上限处理复杂 SQL 的天花板适合中小型业务适合独立开发者其他关键考量因素#类型提示 (Type Hinting)#SQLAlchemy 2.0:通过Mapped类型IDE 能实现真正的点选Autocompletion对开发大型项目极其友好。Piccolo:原生类型安全不需要额外的 Mypy 插件。Tortoise:虽然支持但在某些动态查询下类型推导会断掉。性能与速度#SQLAlchemy:经过 20 年优化在大量数据处理时性能非常强劲。Piccolo:使用了极其轻量的底层实现在简单的增删改查上通常比 SQLAlchemy 更快。Tortoise:因为模仿 Django 做了很多层封装性能相对是三者中最慢的虽然在普通应用中感知不强。生态系统#SQLAlchemy:无敌。几乎所有第三方工具Admin、加密、地理空间都会优先支持它。Piccolo:有自己的 Piccolo Admin但其他生态插件较少。避坑指南#关于 Stars 数的迷思千万不要迷信 Stars。Piccolo 虽好但 1.9k Stars 意味着它的生态宽度不足。如果你在做一个涉及千万级资金、或者需要复杂数据库迁移的项目请务必选择SQLAlchemy。它的 11.7k Stars 换来的是你在深夜修 Bug 时能搜索到的成千上万条 StackOverflow 答案。关于 Migration迁移的执念对于 web 项目来说迁移工具的稳定性高于一切。Alembic 虽然配置稍微麻烦点但它处理修改字段类型、多库同步等复杂场景的能力是其他原生工具难以企及的。关于 Admin 的诱惑Piccolo Admin 真的很帅像极了 TypeScript 生态里和 prisma、drizzle 类似的现代工具。但别忘了SQLAlchemy 的丰富生态也有类似的 admin 界面而且 admin 界面只是本地开发时调试使用真正交付还是需要开发真正的管理后台。