FastAPI框架为什么在启动时建表

一般采用的框架是使用FastAPI+sqlalchemy来进行数据库部分的操作,其中主要是分为以下几步:

  1. 使用脚本来进行建表(推荐)/直接在fastapi启动时进行建表(小项目)

为什么不采用fastapi的create_all方法来进行建表:

  • 如果是大项目有多个表多个实例,每个实例服务都去遍历一遍表导致速度缓慢
    • 会导致职责混淆,数据库建表按道理来说是运维部分的工作,fastapi启动服务是指可以使用整个服务了,所以无需再fastapi实例启动时建表

    • 如果大项目有多个实例服务,如果同时启动fastapi时使用create_all方法会出现对数据库进行锁的竞争导致卡死

    • fastapi的create_all方法只是会判断有没有表再进行判断,不会更新表的信息,如果添加/删除字段了更新表会出现ORM与数据库不对应的情况,并且在运行时没有报错,在运行时才会报错

    • fastapi启动时建表会导致数据库的版本无法管理,没办法进行回退

    • 采用fastapi建表没办法使用CI/CD(自动化集成/自动化部署)的整体流程,

      CI:
      ├─ lint # 代码检查,一般采用ruff
      ├─ test # 自动化测试
      ├─ migrate # 数据库迁移
      └─ build image # 打包成镜像

      CD:
      ├─ deploy # 部署
      └─ start app # 启动服务

  1. 数据库的配置,可以采用同步/异步的方式去进行实现,异步的话在同时操作数据库时就需要添加相关的锁/采用事务的方式防止出现同时操作一批数据导致出现脏数据
  2. 定义数据库的model,即ORM部分,要求ORM部分是与数据库进行对接的
相关推荐
oradh6 小时前
Oracle闪回技术操作总结
数据库·oracle·oracle闪回技术操作总结·oracle闪回·flashback技术
ltl7 小时前
RocksDB 并发 Compaction 与 Rate Limiter
数据库
闻道且行之8 小时前
图片处理助手|泊松融合原理 + C++ 工程实现,seamlessClone 三模式一次讲透
数据库·c++·人工智能·opencv
夏炳辉.9 小时前
PostgreSQL 高可用集群核心配置参数全解:从原生流复制到 Patroni 企业级方案
数据库·postgresql
努力的小雨10 小时前
KES 开启 SSL 前,证书、端口和客户端要一起验
数据库
DevOps老兵10 小时前
AI全栈知识07:向量数据库 - Milvus/Chroma实战
数据库·ai·milvus
这个DBA有点耶10 小时前
当数据库从“存储”走向“决策”:金仓数据库的融合架构之路
数据库·架构·aigc
smilejingwei10 小时前
Trae+SQLazy 实践 SQL 国产化移植:Oracle => 达梦
数据库·sql·oracle
意疏11 小时前
2026年远控软件安全横评:六款主流工具逐项核查——官方文档、一手实测与安全事件,全摊开
大数据·前端·数据库
名不经传的养虾人12 小时前
从0到1:企业级AI项目迭代日记 Vol.90|Agent变快了,Judge定下来了
大数据·数据库·人工智能·ai编程·企业ai