让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
目录中没有添加新的迁移脚本。过去一直有效,我不知道为什么它不再有效。
答案 0 :(得分:0)
对于可能会遇到此问题的人,我做了几件事:
1)升级到最新版本的flask-migrate。这对我来说已经解决了(大部分)问题。
2)如果您有旧的迁移,请将其移动到新文件夹(例如mv migrations/ migrations_old
),然后使用flask db init
重新初始化迁移。然后,对数据库进行所需的更改,并检查是否正确创建了新的迁移脚本。
当然,不能保证这会起作用。我仍然没有弄清楚本案的根本问题,但是这两个步骤都有效。
答案 1 :(得分:0)
当存在我尚未部署的现有迁移时,我遇到了此问题。运行 flask db upgrade
后,flask-migrate 能够检测到新列。