#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 смог обнаружить новый столбец.