миграция flask — не обнаружено добавление нового столбца

#python #flask #alembic

#python #flask #перегонный куб

Вопрос:

Возникли трудности с получением 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>

Я вношу изменения в models.py файл, добавляя новый столбец в одну из моих таблиц.

Затем я запускаю команду flask db migrate

Однако единственный результат, который я получаю от приведенной выше команды, это:

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

И в versions каталог migrations папки не добавлен новый скрипт миграции. Это работало в прошлом, и я не уверен, почему это больше не работает.

Ответ №1:

Для тех, кто, возможно, борется с этой проблемой, я сделал пару вещей, чтобы помочь:

1) обновитесь до последней версии flask-migrate. это исправило (большинство) проблем для меня.

2) если у вас есть старые миграции, переместите их в новую папку (например mv migrations/ migrations_old ), а затем повторно запустите миграции с помощью flask db init . Затем внесите необходимые изменения в базу данных и убедитесь, что новый сценарий миграции был создан правильно.

Конечно, нет гарантий, что это сработает. Я все еще не разобрался с основной проблемой в моем случае, но эти два шага сработали.

Ответ №2:

У меня возникла эта проблема, когда существует миграция, которую я еще не развернул. После запуска flask db upgrade flask-migrate смог обнаружить новый столбец.