У меня возникли проблемы с получением Alembic для автогенерации миграции кандидатов из изменений в классы с помощью db.Model
(Flask-SQLAlchemy) вместо Base
.
Я изменил env.py
, чтобы создать приложение Flask, импортировать все соответствующие модели, инициализировать базу данных и затем выполнить миграции:
...
uri = 'mysql://user:[email protected]/dbname?charset=utf8'
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = uri
app.config['SQLALCHEMY_ECHO'] = True
db.init_app(app)
with app.test_request_context():
target_metadata = db.Model.metadata
config.set_main_option('sqlalchemy.url', uri)
if context.is_offline_mode():
run_migrations_offline()
else:
run_migrations_online()
...
Этот подход отлично подходит для drop_all()
, create_all()
(например, при воссоздании тестового db для модульного тестирования), но в этом случае он, похоже, упадет. Автоматически сгенерированные скрипты версий всегда имеют пустые методы обновления и понижения, например,
def upgrade():
### commands auto generated by Alembic - please adjust! ###
pass
### end Alembic commands ###
def downgrade():
### commands auto generated by Alembic - please adjust! ###
pass
### end Alembic commands ###
Мои изменения включали переименование столбцов, изменение определений столбцов и т.д., а не только изменения индексов и внешних ключей.
Кто-нибудь там использует Alembic с Flask-SQLAlchemy? Любая идея, где я ошибаюсь?
Спасибо большое!