db.Model
の代わりに (Flask-SQLAlchemy)を使用して、Alembic がクラスへの変更から候補の移行を自動生成するのに問題がありBase
ます。
env.py
Flask アプリを作成し、関連するすべてのモデルをインポートし、データベースを初期化し、移行を実行するように変更しました。
...
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()
...
drop_all()
このアプローチは、create_all()
(たとえば、単体テスト用にテスト データベースを再作成する場合) には問題なく機能しますが、この場合はうまくいかないようです。自動生成されたバージョン スクリプトには、常に空のアップグレードおよびダウングレード メソッドがあります。
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 ###
私の変更には、インデックスと外部キーの変更だけでなく、列の名前変更、列定義の変更などが含まれます。
Flask-SQLAlchemy で Alembic を使用している人はいますか? どこが間違っているのか分かりますか?
どうもありがとう!