python - 烧瓶迁移脚本无法识别不同文件夹中的模型(使用烧瓶迁移)
问题描述
我来自 Django 背景。在烧瓶中,我正在寻找迁移命令。为此,我应该如何使用迁移脚本。我同样参考了文档(https://flask-migrate.readthedocs.io/en/latest/#using-flask-script)。
我的项目结构是这样的。
- 服务
- 初始化.py
- 楷模
- 初始化.py
- employee.py(包含模型声明)
- 管理.py
- app.py(项目的起点)
- urls.py(用于 url 路由的蓝图)
根据文档,如果我在 manage.py 文件中编写模型,那么它将按预期工作。但是我有模型文件夹,我在其中编写所有模型。因此,如果我点击python3 manage.py db migrate
命令,它将不会检测到模型文件中的任何更改。
- 在模型的init .py 文件中导入模型。
- 在 manage.py 文件中导入模型。
管理.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.
解决方案
我找到了解决方案。默认的 flask-migrate 在我们定义迁移的同一个文件中查找模型(在我的例子中是 manage.py 文件)。
在这里,我在模型包中创建了模型(包名可以是任何名称)
为了解决这个问题,我们需要执行两个步骤。1)在模型包的init .py文件中导入模型。2)在我们定义之后导入模型
db = SQLAlchemy(应用程序)
命令。该导入语句未使用,但它会告诉 flask-migrate 模型已在模型包中预设。
推荐阅读
- android - 如何使用 FCM 将链接发送到 android 应用程序
- azure - 无法将资产与 blob 关联
- c# - 在 Winforms C# 中启用拼写检查的情况下,如何在鼠标悬停在 WPF 文本框上时显示拼写错误建议弹出窗口?
- python - pandas groupby.agg 列出行为
- javafx - Javafx 按数据库值更改特定行颜色
- json - 返回 JSON 并打印出 reactJS
- javascript - 不要使用 util.inspect 记录符号
- android - 如何检查mysql数据库中的值?
- javascript - 如何在 wordpress 网站上隐藏外部 java sciprt 代码的图像
- reactjs - GraphQL Apollo:变量 $bool 的值无效“false”;预期的布尔类型;布尔值不能表示非布尔值:“false”