如果需要对已经创建的数据库表中的某个属性字段进行修改,假设为
User
表;则需要对数据库进行迁移才能更新表字段,以下是一般的步骤:
- 使用迁移工具:Alembic 来生成数据库迁移脚本。迁移脚本会包含对数据库表结构的更改描述。
- 运行迁移脚本,将更改应用到数据库中的表结构。
这里以 Alembic 为例简要说明:
- 执行安装 Alembic安装命令:pip install alembic
- 在 FastAPI 的项目工程下执行命令:alembic.exe init alembic
- 执行完上面步骤二之后,会在项目目录中创建一个 alembic 的文件夹和 alembic.ini 文件
- 打开 alembic.ini 文件,搜索并找到 sqlalchemy.url 这一行
修改为自己的MySQL链接:sqlalchemy.url = mysql://root:
cfzy2018@127.0.0.1
:3306/learn01
- 修改处2:编辑 alembic 文件夹下的 env.py文件,找到 target_metadata = None 这一行,修改为
target_metadata = Base.metadata
Base.metadata 这行代码为 SQLAlchemy 创建
js
复制代码
# db.py 文件 from sqlalchemy.ext.declarative import declarative_base # 在 models.py 文件中,定义数据库模型类。使用 SQLAlchemy 提供的 declarative_base 函数创建一个基类,然后基于该基类定义模型类。 Base = declarative_base()
如果项目有多个Model的情况下也可以引用多个
target_metadata [ModelBase1.metadata, ModelBase2.metadata]
- 修改完以上2处之后可以执行迁移脚本命令
alembic revision -m “创建一个用户表”
执行完上面这条语句后,将会在versions目录下生成一个新文件,接下来就可以给数据模型进行修改或添加新的字段
js
复制代码
class User(Base): # 定义表的名称 __tablename__ = 'tb_users' # 定义字段 id = Column(Integer, primary_key=True, index=True, autoincrement=True) # 用户 ID 号 userid = Column(String(64), unique=True, nullable=False) # 手机号码 (修改) phone = Column(String(11), nullable=False) # 邮箱(新增) email = Column(String(255)) # 用户名(新增) nickname = Column(String(50), nullable=False) # 密码 identity_has = Column(String(255), nullable=False)
你也可以添加新的数据模型,完成后执行迁移指令
alembic revision –autogenerate -m “修改了用户信息表,增加用户名字段”
alembic upgrade head
也可以使用命令 alembic upgrade head 将 alembic 的版本更新到最新版,head 代表最新的版本,如果我们想要迁移到指定版本,也可以制定版本号。
alembic upgrade 767ad53ec2de
一些另外的操作
- alembic upgrade +2 (从当前的位置移动两个版本)
- alembic downgrade -1(降级接受负值)
- alembic upgrade ae10+2 (相对标识符也可以是特定版本)
其他一些异常错误处理
异常错误:FAILED: Target database is not up to date.
执行 alembic revision –autogenerate -m “提交的信息内容” 语句后出现错误信息
js
复制代码
INFO \[alembic.runtime.migration] Context impl MySQLImpl. INFO \[alembic.runtime.migration] Will assume non-transactional DDL. ERROR \[alembic.util.messaging] Target database is not up to date. FAILED: Target database is not up to date.
表示目标数据库不是最新的,存在未应用的迁移。
解决这个问题的方法是先将目标数据库更新到最新状态,然后再生成自动迁移脚本。你可以运行以下命令来将目标数据库更新到最新状态:
alembic upgrade head
异常错误
:FAILED: Can't locate revision identified by '82037871a5b7'
打开数据库找到 alembic_version 表,删除里面的信息,然后执行 alembic upgrade head
最终处理方案
如果以上方法都无效,可以尝试将 versions 文件夹下面的缓存记录文件全部删除,然后打开数据库删除 alembic_version 表里面的信息,重新执行语句
alembic revision --autogenerate -m "提交的信息内容"
alembic upgrade head