Flask-Migrate迁移能否在不同的数据库引擎上工作?

我正在编写一个使用flask-SQLAlchemy和flask-Migrate的flask应用程序。生产具有PostgreSQL数据库,但是对于开发,我希望使用SQLite而不是必须在开发计算机上安装完整的PostgreSQL。

我按照in its docs的说明设置了flask-Migrate。我不禁注意到,当我在开发箱上运行flask db migrate时,这些是写到控制台的前两行:

INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.

我的问题:这是否意味着生成的迁移脚本仅适用于SQLite?

我本来不会,因为您应该将脚本提交到版本控制(在手动检查后),然后将其用于生产中的迁移。 flask-Migrate的作者本人也承认SQLAlchemy的优点之一是您可以在开发和生产中使用其他数据库引擎(请参见his blog post)。但是,为什么它告诉我这些假设呢?有没有办法告诉它不要使用特定的数据库引擎?

hezhenhuaf1 回答:Flask-Migrate迁移能否在不同的数据库引擎上工作?

Alembic打印的Context impl SQLiteImpl消息实际上是在应用程序中配置的数据库URL的结果。该URL被馈送到Alembic,后者为您选择的数据库分配适当的驱动程序。在生产环境中,您会看到Context impl PostgresqlImpl

在开发和生产中使用不同的数据库是可以的,但是您必须小心使迁移的内容足够通用,以至于两者都可以使用。显然,您将无法使用Postgres或SQLite特定功能。我还建议添加一个也基于Postgres的登台服务器,在该服务器上可以在生产环境上运行迁移之前对其进行测试。

本文链接:https://www.f2er.com/2983339.html

大家都在问