7. FastApi ORM

1,073 阅读4分钟

对比

框架与 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,适用于需要处理大量数据的生产环境。
  • Flask + SQLAlchemy

    • Flask:是一个轻量级的同步 Web 框架,灵活且易于扩展,适合快速开发和原型制作。

    • SQLAlchemy:是一个功能强大的同步 ORM,提供了全面的功能,支持复杂的数据库查询和事务管理。

    • SQLAlchemy 支持多个数据库管理系统(DBMS)。目前,它主要支持以下几种数据库:

      1. PostgreSQL: 通过 psycopg2asyncpg(用于异步)连接,支持事务、数据完整性、以及多种高级特性。
      2. MySQL/MariaDB: 使用 mysqlclientPyMySQL 进行连接,支持多种特性和查询优化。
      3. SQLite: 内嵌数据库,默认通过 sqlite3 模块支持,可以非常方便地用于开发、测试和轻量级应用。
      4. Oracle: 通过 cx_Oracle,SQLAlchemy 提供对 Oracle 数据库的支持,适合处理大规模企业级应用。
      5. Microsoft SQL Server: 通过 pyodbcpymssql,支持对 SQL Server 的连接和操作。

数据库迁移工具

  • 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
  1. 使用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:存放迁移文件
    
  2. 使用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类,重新生成迁移文件,比如添加一个字段

image.png

    修改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字段
    
  1. 重新执行迁移,写入数据库
PS E:\myproject\fastapi_app> aerich upgrade
    Success upgrading to 1_20250219142827_course add clas.py

image.png

  1. 回到上一个版本
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

image.png

参考:blog.csdn.net/littlefun59…