我正在编写使用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)。但是,为什么它告诉我这些假设呢?
在烧瓶迁移中,sqlalchmey从SQLALCHEMY_DATABASE_URI
与数据库连接,在您的应用程序中,您直接将其指定为'sqlite:///' + os.path.join(basedir, 'app.db')
或在环境变量中由DATABASE_URL
定义。因此,如果直接将连接器数据添加到SQLALCHEMY_DATABASE_URI
,则需要再次在代码中为Postgresql服务器更改它。给它作为env变量,您可以在那里为任何数据库更改它,而无需处理代码。
现在问您的问题,因为您将sqlite连接器定义为sqlalchmey,所以迁移脚本仅对sqlite运行,而不对postgres运行,对于postgres,您需要再次重新初始化迁移]]