在 FastAPI 中,数据库是自动生成的,它是根据我当时拥有的模型创建的。创建数据库后,我将模型的属性名称从“owner_id”更改为“user_id”,但在重新运行 API 后,它没有升级数据库。
如何在 FastAPI 中触发数据库升级(使用 SQLAlchemy)?我需要运行特定的命令吗?
我已经尝试为此生成迁移并且它可以工作,但我认为有一种更简单的方法不依赖于从 Alembic 迁移。
我希望 CLI 命令在模型更改后触发数据库升级...
自动升级数据库是一个非常糟糕的主意。 在很多情况下,不清楚发生了什么/如何发生变化。您将列
owner_id
重命名为 user_id
的示例就是一个典型示例。有多种更改数据库以匹配新模式的方法:
owner_id
列重命名为user_id
owner_id
列并创建一个新的空user_id
列事实上,一些工具会更喜欢第二个版本(包括 Alembic:Autogenerate Detect 是什么(以及它没有检测到什么?)),并且您会丢失该列的全部数据。 更改数据库架构的最佳方法是通过手动迁移检查进行数据库迁移。 Alembic 是它的典型工具。一开始初始化它,每当有变化时:
alembic revision --autogenerate -m "some message"
alembic upgrade head
警告:这里很危险.
如果您真的想直接应用更改,您也可以以编程方式使用 Alembic:通过请求更改并直接应用它们。 Alembic 文档有这样一个用例的配方:直接运行 Alembic 操作对象(如来自自动生成)。 但正如我上面提到的,你很可能会使用这种方法丢失一些数据,可能迟早会丢失。
顺便说一句,FastAPI 不会为您生成表格。在你的代码中的某个地方,你可能有像
Base.metadata.create_all(engine)
这样的东西,它是纯 SqlAlchemy 代码。