I'm having trouble getting Alembic to autogenerate candidate migrations from changes to classes using db.Model
(Flask-SQLAlchemy) instead of Base
.
I've modified env.py
to create my Flask app, import all relevant models, initialize the database, and then run migrations:
...
uri = 'mysql://user:password@host/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()
...
This approach works fine for drop_all()
, create_all()
(for example, when recreating a test db for unit testing), but it seems to fall flat in this case. The auto generated version scripts always have empty upgrade and downgrade methods, e.g.,
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 ###
My changes have included renaming columns, changing column definitions, etc., not just changes to indices and foreign keys.
Is anyone out there using Alembic with Flask-SQLAlchemy? Any idea where I'm going wrong?
Thanks much!