饮冰十年-人工智能-FastAPI-03- FastAPI之模型迁移(类似Django的migrante)
在开发 Web 应用程序时,通常会涉及到数据库模型的更改,例如添加新的表、字段或索引。为了使这些更改反映在数据库中,我们使用数据库迁移工具。FastAPI 本身并不包含数据库迁移(migration)的功能,但你可以使用第三方库来处理数据库迁移。其中,Alembic
是一个常用的数据库迁移工具,可以与 FastAPI 一起使用。本文我将向你介绍如何结合 FastAPI 和 Alembic 进行 SQLite 数据库迁移的步骤,
一、安装 Alembic 和配置
步骤 1:安装 FastAPI 和 Alembic
pip install fastapi[all] alembic
这将安装 FastAPI 和 Alembic 及其相关依赖项。
pip install alembic
步骤 2:创建 FastAPI 项目
todo:参考上一篇博客
3、创建数据库模型
在 FastAPI 项目中,我们首先定义数据库模型。在 main.py
文件中创建一个简单的用户模型:

from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) username = Column(String, index=True) email = Column(String, unique=True, index=True)
4:初始化 Alembic
运行以下命令初始化 Alembic 配置:
alembic init alembic
这将在项目中创建一个名为 alembic
的文件夹,并生成一些默认的配置文件。
步骤 5:配置 Alembic
打开 alembic.ini
文件,将数据库连接信息配置为你的实际数据库连接。找到以下部分:
# sqlalchemy.url = driver://user:pass@localhost/dbname
sqlalchemy.url = sqlite:///database.db
将其更新为你的数据库连接信息。
步骤 6:生成迁移脚本
运行以下命令,使用 Alembic 自动生成数据库迁移脚本:
alembic revision -m "first migrations"
Alembic 将分析你的 SQLAlchemy 模型,并生成一个包含必要指令的迁移脚本,以将数据库模式调整为与你的模型定义相对应的状态
步骤 7:执行数据库迁移
运行以下命令,将生成的迁移脚本应用到数据库:
alembic upgrade head
这将在数据库中创建相应的数据库。
二、进行模型创建与迁移
1:修改env.py文件
from main import User target_metadata = User.metadata
这里暂时把model放置在了main.py,仅作为演示
2:生成迁移脚本
alembic revision --autogenerate -m "initial migrations"
3:执行数据库迁移
alembic upgrade head
三、进行模型调整与创建
1:修改模型文件
在此基础上添加一个新模型,对旧模型添加一个字段,删除一个字段

# This is a sample Python script. # Press Shift+F10 to execute it or replace it with your code. # Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings. from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) username = Column(String, index=True) # email = Column(String, unique=True, index=True) age = Column(Integer, index=True) class School(Base): __tablename__ = "school" name = Column(String, index=True)
2:修改env.py文件
from main import User, School
target_metadata = School.metadata
target_metadata = User.metadata
3:生成迁移脚本
alembic revision --autogenerate -m "second migrations modify user,add school "
4:执行数据库迁移
alembic upgrade head
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2018-12-09 饮冰三年-人工智能-Python-23 Django生命周期和中间件
2017-12-09 步步為營-98-MyAPI