如何在新的应用程序部署中将数据库与 Flask-Migrate 同步?

How to sync db with Flask-Migrate in a fresh application deployment?

将应用程序部署到新服务器(即数据库为空)时,如何使用 Flask-Migrate 正确同步数据库?

我已经将 Flask-Migrate 添加到项目中,因为我已经有了一些架构,所以我没有 "initial" 全部 create_table() 的迁移。现在,当我在我的部署脚本中执行 manage.py db upgrade 时,我得到 relation "..." does not exist.

是否有任何内置方法来检测空数据库和 运行 'create_all()' 而不是迁移?这就是 Alembic 的食谱 suggests。因为我已经在使用 Flask-Migrate,所以我正在寻找处理迁移的统一方法。

理想的解决方案是为数据库架构生成初始迁移,因为它是您开始使用 Flask-Migrate 和 Alembic 跟踪迁移的那一天。

如果您当时记得这样做,这样做很简单。只需创建一个单独的空数据库(单独保留您的真实数据库),将您的应用配置为使用空数据库,然后生成迁移。此迁移将具有整个模式。生成迁移后,摆脱空数据库并将配置恢复到真实数据库。

如果您已经有额外的迁移,那么它会变得有点复杂。您将必须返回到要生成初始迁移的代码版本,然后按照上述过程生成它。最后,您需要将初始迁移作为第一个迁移插入迁移列表中。查看一些迁移脚本,了解每个迁移如何引用前一个迁移。几个小的编辑应该让你起来 运行.

如果这看起来工作量太大,那么另一种选择是使用 db.create_all() 生成最新迁移的数据库,然后 ./manage.py db stamp head 告诉 Alembic 它应该考虑数据库已更新。