【问题标题】:flask migrate - not detecting addition of new column烧瓶迁移 - 未检测到新柱的添加
【发布时间】:2021-02-13 19:45:16
【问题描述】:

很难让 Flask-migrate 检测表中的新列。我的猜测是某些东西没有被导入,或者我以错误的顺序导入东西。

应用程序由__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>

我对@9​​87654326@ 文件进行了更改,在我的一个表中添加了一个新列。

然后我运行命令flask db migrate

但是,我从上述命令得到的唯一输出是:

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

并且没有新的迁移脚本添加到migrations 文件夹的versions 目录中。这在过去有效,但我不确定为什么它不再有效。

【问题讨论】:

    标签: python flask alembic


    【解决方案1】:

    对于可能遇到此问题的人,我做了几件事来提供帮助:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2018-12-09
        • 1970-01-01
        • 1970-01-01
        • 2019-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多