Flask-Migrate,若表已存在则不创建
我有一个Flask项目,里面用到了MySQL数据库,并且使用SQLAlchemy作为对象关系映射(ORM),还用Flask-Migrate来处理数据库的迁移。
我写好了我的模型,但当我运行迁移时,迁移文件是空的,因为现有的表不在Flask-Migrate的管理范围内。所以我实际上需要删除那些表,才能让迁移工具检测到它们并重新创建。但问题是,我不想删除和重新创建我的表。
那么,有没有办法让我可以把我的模型和现有的表同步起来呢?
编辑:我刚发现,在env.py文件中,可以指定已经存在的表,这样就不会创建那些表了:
metadata.reflect(engine, only=["table1", "table2"])
谢谢你的回答。
1 个回答
2
自动迁移的意思是根据你的模型和数据库之间的差异来生成的。如果你在使用Flask-Migrate/Alembic之前就已经有了一个数据库,那么你可以从那个时候开始跟踪迁移。
如果你想生成一个初始迁移,让你的数据库更新到当前版本,最简单的方法就是删除所有的表,就像你提到的那样。为了避免丢失数据,我可以给你两个建议:
- 在删除表之前先备份你的数据库,然后在生成迁移后再恢复数据。
- 暂时把你的应用指向一个空的数据库(换一个数据库)。一旦生成了迁移,再把它指回你的原数据库。
希望这些建议对你有帮助。