python - 如何在 flask-migrate 迁移中自动导入模块

标签 python flask alembic flask-migrate

我的 flask 项目在其某些模型定义中使用了 sqlalchemy_utils,这会导致迁移错误,例如:

NameError: global name 'sqlalchemy_utils' is not defined

由于这个包没有被导入到迁移文件中。

我想让 flask-migrate/alembic 自动生成将这个包导入迁移文件的行,我该如何实现?

我查看了 alembic.ini 和 migrations/env.py - 但我不清楚什么是正确的方法/如果可能的话。

最佳答案

最直接的方法是修改模板以包含该导入。

script.py.mako:

...
from alembic import op
import sqlalchemy as sa
import sqlalchemy_utils
${imports if imports else ''}
...

如果你有多个提供自定义类型的模块,你可以使用策略described in the docs .在您的项目中创建一个导入不同模块的模块,然后将其设置为 Alembic 应用于用户类型的前缀。

/myapp/migration_types.py:

from sqlalchemy_utils import *
from myapp.custom_model_type import MyType

script.py.mako:

...
from myapp import migration_types
...

env.py:

...
def run_migrations_online():
    ...
    context.configure(
        ...
        user_module_prefix='migration_types.',
        ...
    )
...

关于python - 如何在 flask-migrate 迁移中自动导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34292968/

相关文章:

javascript - Bokeh 从 CustomJS 获取值(更改数据源中的值)

python - 将命名约定添加到现有数据库

python - 类中定义的变量在 Python 3 中给出错误

python - 通过两个不同长度的数组和索引操作运行 for 循环

python - CSS 未应用于 Flask 应用程序

python - flask "get_or_404"类似功能但具有另一个状态代码

mysql - SQLAlchemy 和 MySQL 中一对多关系中列的唯一约束

python - Unicode 与 Alembic 不一致

python - 为什么我要在 Python 中使用 int( input().strip() ) 而不是 int( input() )?

python - 单个 Flask 进程接收多少并发请求?