我让flask-migrate (版本1.8.0)在开发环境中很好地处理sqlite数据库。现在,我想将我们的数据迁移到MySQL,并维护我们所有的迁移历史(这样它就可以与git存储库中的Flask-SQLAlchemy模型保持同步)。
我创建了一个空的MySQL数据库,在更改我的SQLALCHEMY_DATABASE_URI之后,我尝试运行:
python manage.py db upgrade这导致了无法删除表migrate_version的错误。(这是有意义的,因为这是一个新数据库,尽管sqlite实际上包含表'alembic_version‘而不是’migrate_version‘。)
因此,我尝试初始化这个新数据库:
python manage.py db init现在我得到一个错误:“目录迁移已经存在”。
我可以重命名该文件夹并重新运行该命令,但之后我将丢失所有以前的迁移。我认为当我们过渡到我们的测试和生产环境时,我们也会遇到同样的问题。
我在文档中看到Flask-Migrate支持多个数据库,但我认为这看起来更适合在单个开发环境中维护多个数据库。有没有办法让Flask-Migrate在多个开发环境中跟踪更改?
发布于 2019-06-29 17:01:43
要解决OP问题中的实际问题,您需要使用--directory标志来启动特定于每个环境的数据库的迁移目录。
在flask-migrate文档中:
目录所有命令还带有一个--
目录选项,该选项指向包含迁移脚本的目录。如果省略此参数,则使用的目录为migrations。
所以:
flask db init --directory=[DIRECTORY NAME]--directory -Migrate本身没有数据库的内存,所以当使用Flask运行迁移命令时,它将引用指定的迁移目录(默认情况下,当不使用Flask标志时,这称为‘迁移’)。
flask db migrate --directory=[DIRECTORY_NAME]等。
不用说,flask命令将引用由配置文件或环境变量配置的应用程序上下文。
我通常为每个环境创建一个迁移目录,并明确引用该环境:例如,开发和登台,使用类似'migrations_dev‘和'migrations_stg’的内容。
希望这能对你有所帮助。
发布于 2016-03-28 21:20:22
以下是我从SQLite过渡到MySQL并维护所有迁移历史记录所采取的步骤。我高度怀疑有更好的方法来做到这一点,但它对我很有效。
使用用于“新”迁移的另一个文件夹初始化新的空白数据库
python manage.py db init -d tmp创建迁移
python manage.py db migrate -d tmp -m "Bring MySQL up to date"应用迁移
python maange.py db upgrade -d tmp现在,您可以删除"tmp“迁移文件夹。你不再需要它了。找到头部迁移。查找“Rev: your_revision_num (Head)”
python manage.py db show 对MySQL数据库运行update语句
update alembic_version set version_num = 'your_revision_num'现在,您的MySQL数据库模式应该与旧的SQLite模式匹配,并且您还将拥有完整的迁移历史记录。
发布于 2016-03-26 00:06:50
表migrate_version用于按包sqlalchemy-migrate跟踪迁移。如您所知,Flask-Migrate使用的包Alembic使用alembic_version表。
所以我猜测,您要使用的这个MySQL数据库以前曾被一个处于sqlalchemy-migrate控制下的应用程序使用过。
我建议您删除MySQL数据库并创建一个全新的数据库。
https://stackoverflow.com/questions/36208977
复制相似问题