烧瓶迁移-未检测到添加新色谱柱

时间:2019-04-03 21:35:41

标签: python flask alembic

让Flask迁移以检测表中的新列非常困难。我的猜测是某些东西没有被导入,或者我以错误的顺序导入了东西。

该应用由__init__.py文件实例化。应用程序的整体目录的结构如下:

|-static/
|-templates/
|__init__.py
|filters.py
|models.py
|forms.py
|utils.py
|views.py

__init__.py文件的相关部分如下所示:

# Import flask and template operators
from flask import Flask, render_template, Blueprint
import os
# Import SQLAlchemy
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_uploads import UploadSet, configure_uploads
from flask_mail import Mail
# Define the WSGI application object
app = Flask(__name__)

# Configurations
app.config.from_pyfile(os.path.join('..','config.py'))

# Define the database object which is imported
# by modules and controllers
db = SQLAlchemy(app)
from . import models
migrate = Migrate(app, db,compare_type=True)

mail = Mail(app)

在命令行中,我设置了export FLASK_APP=<app_name>

我对models.py文件进行了更改,向我的一个表中添加了新列。

然后我运行命令flask db migrate

但是我从以上命令获得的唯一输出是:

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

versions文件夹的migrations目录中没有添加新的迁移脚本。过去一直有效,我不知道为什么它不再有效。

2 个答案:

答案 0 :(得分:0)

对于可能会遇到此问题的人,我做了几件事:

1)升级到最新版本的flask-migrate。这对我来说已经解决了(大部分)问题。

2)如果您有旧的迁移,请将其移动到新文件夹(例如mv migrations/ migrations_old),然后使用flask db init重新初始化迁移。然后,对数据库进行所需的更改,并检查是否正确创建了新的迁移脚本。

当然,不能保证这会起作用。我仍然没有弄清楚本案的根本问题,但是这两个步骤都有效。

答案 1 :(得分:0)

当存在我尚未部署的现有迁移时,我遇到了此问题。运行 flask db upgrade 后,flask-migrate 能够检测到新列。