对比
框架与 ORM 与 迁移工具
-
FastAPI + Tortoise ORM + Aerich:
- 适用于需要高并发、高性能、实时处理的 Web 应用,如实时数据处理、API 服务、聊天应用、金融交易系统等。
- 如果你需要异步编程、非阻塞操作和高吞吐量,FastAPI 和 Tortoise ORM 是理想的选择。
-
Flask + SQLAlchemy + Flask-Migrate:
- 适用于传统 Web 应用、企业级应用、数据库操作较为复杂的系统,如 CMS、电子商务平台、数据分析系统等。
- 如果你的应用负载较低到中等,且不需要异步处理,Flask 和 SQLAlchemy 会非常合适。
框架与 ORM
-
FastAPI + Tortoise ORM:
-
FastAPI:是一个基于 Python 3.7+ 的高性能异步 Web 框架,专注于异步编程,支持自动生成 API 文档(OpenAPI)等。
-
Tortoise ORM:一个异步 ORM,适合异步数据库操作,主要用于高并发、高性能的 Web 应用。Tortoise ORM 是一个异步 ORM,适用于多种数据库。你提到的数据库支持也挺常见的:
- PostgreSQL >= 9.4(使用
asyncpg): 这是 Tortoise ORM 最常见的数据库支持之一,asyncpg提供了高效的异步连接。asyncpg作为 PostgreSQL 的异步数据库驱动。 - SQLite(使用
aiosqlite): SQLite 是一个轻量级数据库,适合开发和测试。Tortoise ORM 支持通过aiosqlite来进行异步操作。 - MySQL/MariaDB: Tortoise ORM 也支持 MySQL 和 MariaDB,适用于需要处理大量数据的生产环境。
- PostgreSQL >= 9.4(使用
-
-
Flask + SQLAlchemy:
-
Flask:是一个轻量级的同步 Web 框架,灵活且易于扩展,适合快速开发和原型制作。
-
SQLAlchemy:是一个功能强大的同步 ORM,提供了全面的功能,支持复杂的数据库查询和事务管理。
-
SQLAlchemy 支持多个数据库管理系统(DBMS)。目前,它主要支持以下几种数据库:
- PostgreSQL: 通过
psycopg2或asyncpg(用于异步)连接,支持事务、数据完整性、以及多种高级特性。 - MySQL/MariaDB: 使用
mysqlclient或PyMySQL进行连接,支持多种特性和查询优化。 - SQLite: 内嵌数据库,默认通过
sqlite3模块支持,可以非常方便地用于开发、测试和轻量级应用。 - Oracle: 通过
cx_Oracle,SQLAlchemy 提供对 Oracle 数据库的支持,适合处理大规模企业级应用。 - Microsoft SQL Server: 通过
pyodbc或pymssql,支持对 SQL Server 的连接和操作。
- PostgreSQL: 通过
-
数据库迁移工具
-
Aerich:
- Aerich:是 Tortoise ORM 的迁移工具,适用于异步数据库操作,支持生成迁移脚本、执行数据库升级和降级等操作。
- Aerich 的使用是异步的,和 Tortoise ORM 紧密集成,适合异步开发环境。
- 在异步环境中,Aerich 非常适合与 FastAPI 和 Tortoise ORM 配合使用。
-
FFlask-Migrate:
- Flask-Migrate:是 Flask 的数据库迁移工具,基于 Alembic,支持同步数据库操作。
- Flask-Migrate 通过 Flask CLI 和 Alembic 配合,提供了易用的数据库迁移管理,可以自动生成迁移脚本、管理数据库版本。
- 适合传统同步应用的数据库管理,功能丰富,社区支持广泛。
使用FastApi + Tortoise ORM + aerich
安装
# 安装 ORM对象关系映射器
pip install tortoise
# 安装数据模型迁移工具
pip install aerich
# 安装postgres 异步数据库驱动
pip install asyncpg
Aerich 使用了这两个库来读取和处理 TOML 配置文件,可能是与数据库迁移和配置文件(如 pyproject.toml 或其他)相关的操作。
tomli用于读取 TOML 配置文件,通常用于初始化或读取配置数据。tomlkit可能在其他地方用于修改和写入 TOML 配置文件(例如数据库迁移配置、项目设置等)。
总结来说:
tomli用来读取 TOML 文件。tomlkit用来读取和修改 TOML 文件。
pip install tomli
pip install tomlkit
-
使用aerich 初始化配置 只需要使用一次
PS E:\myproject\fastapi_app> aerich init -t setting.TORTOISE_ORM Success creating migrations folder ./migrations Success writing aerich config to pyproject.toml # 初始化完会在当前目录生成一个文件:pyproject.toml和一个文件夹:migrations - pyproject.toml:保存配置文件路径,低版本可能是aerich.ini - migrations:存放迁移文件 -
使用aerich 初始化数据库 一般情况下只用一次(将我们在models.py里面配置的表创建到数据库中)
1. 先去数据库创建数据库
2. 初始化数据库
PS E:\myproject\fastapi_app> aerich init-db
Success creating app migration folder migrations\models
Success generating initial migration file for app "models"
# 在 migrations 下生成了 models/ **_init.py 是创建表的语句
3. 更新模型并进行迁移 创建模型类之后,通常也会修改。修改model类,重新生成迁移文件,比如添加一个字段
修改model类,例如增加一个班级字段
aerich migrate --name add_column --name是给这次迁移起个名字
PS E:\myproject\fastapi_app> aerich migrate --name 'course add clas'
Success creating migration file 1_20250219142310_course add clas.py
#注意,此时sql并没有执行,数据库中course表中没有clas字段
- 重新执行迁移,写入数据库
PS E:\myproject\fastapi_app> aerich upgrade
Success upgrading to 1_20250219142827_course add clas.py
- 回到上一个版本
PS E:\myproject\fastapi_app> aerich downgrade
Downgrade is dangerous: you might lose your data! Are you sure? [y/N]: y
Success downgrading to 1_20250219142827_course add clas.py