2

When deploying an application to a fresh server (i.e. the database is empty) how do I sync the database properly with Flask-Migrate?

I've added Flask-Migrate to the project when I already had some schema in place so I don't have "initial" migrations with all create_table(). Now when I do manage.py db upgrade in my deployment script I get relation "..." does not exist.

Is there any built-in way to detect empty database and run 'create_all()' instead of migrations? This is what the Alembic's Cookbook suggests. Since I'm using Flask-Migrate already I'm looking for some unified way of dealing with migrations.

4

1 回答 1

5

理想的解决方案是为您的数据库模式生成一个初始迁移,就像您开始使用 Flask-Migrate 和 Alembic 跟踪迁移的那一天一样。

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

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

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

于 2016-03-18T15:40:38.777 回答