如果需要对已经创建的数据库表中的某个属性字段进行修改,假设为User表;则需要对数据库进行迁移才能更新表字段,以下是一般的步骤:

  1. 使用迁移工具:Alembic 来生成数据库迁移脚本。迁移脚本会包含对数据库表结构的更改描述。
  2. 运行迁移脚本,将更改应用到数据库中的表结构。

这里以 Alembic 为例简要说明:

  1. 执行安装 Alembic安装命令:pip install alembic
  2. 在 FastAPI 的项目工程下执行命令:alembic.exe init alembic
  3. 执行完上面步骤二之后,会在项目目录中创建一个 alembic 的文件夹和 alembic.ini 文件

  1. 打开 alembic.ini 文件,搜索并找到 sqlalchemy.url 这一行

修改为自己的MySQL链接:sqlalchemy.url = mysql://root:cfzy2018@127.0.0.1:3306/learn01

  1. 修改处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]

  1. 修改完以上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

一些另外的操作

  1. alembic upgrade +2 (从当前的位置移动两个版本)
  2. alembic downgrade -1(降级接受负值)
  3. 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

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐