首页 > 解决方案 > 烧瓶迁移脚本无法识别不同文件夹中的模型(使用烧瓶迁移)

问题描述

我来自 Django 背景。在烧瓶中,我正在寻找迁移命令。为此,我应该如何使用迁移脚本。我同样参考了文档(https://flask-migrate.readthedocs.io/en/latest/#using-flask-script)。

我的项目结构是这样的。

  1. 服务
    • 初始化.py
    • 楷模
      • 初始化.py
      • employee.py(包含模型声明)
    • 管理.py
    • app.py(项目的起点)
    • urls.py(用于 url 路由的蓝图)

根据文档,如果我在 manage.py 文件中编写模型,那么它将按预期工作。但是我有模型文件夹,我在其中编写所有模型。因此,如果我点击python3 manage.py db migrate命令,它将不会检测到模型文件中的任何更改。

管理.py 文件。

from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager

from app import app, db

migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)

if __name__ == '__main__':
    manager.run()

目前它只会在我的数据库中创建 alembic_version 表

这是输出

>> python3 manage.py db migrate
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.env] No changes in schema detected.

标签: pythonpython-3.xflask

解决方案


我找到了解决方案。默认的 flask-migrate 在我们定义迁移的同一个文件中查找模型(在我的例子中是 manage.py 文件)。

在这里,我在模型包中创建了模型(包名可以是任何名称)

为了解决这个问题,我们需要执行两个步骤。1)在模型包的init .py文件中导入模型。2)在我们定义之后导入模型

db = SQLAlchemy(应用程序)

命令。该导入语句未使用,但它会告诉 flask-migrate 模型已在模型包中预设。


推荐阅读