首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何跨多个开发环境使用Flask-migrate

如何跨多个开发环境使用Flask-migrate
EN

Stack Overflow用户
提问于 2016-03-25 03:55:38
回答 4查看 2.3K关注 0票数 4

我让flask-migrate (版本1.8.0)在开发环境中很好地处理sqlite数据库。现在,我想将我们的数据迁移到MySQL,并维护我们所有的迁移历史(这样它就可以与git存储库中的Flask-SQLAlchemy模型保持同步)。

我创建了一个空的MySQL数据库,在更改我的SQLALCHEMY_DATABASE_URI之后,我尝试运行:

代码语言:javascript
复制
python manage.py db upgrade

这导致了无法删除表migrate_version的错误。(这是有意义的,因为这是一个新数据库,尽管sqlite实际上包含表'alembic_version‘而不是’migrate_version‘。)

因此,我尝试初始化这个新数据库:

代码语言:javascript
复制
python manage.py db init

现在我得到一个错误:“目录迁移已经存在”。

我可以重命名该文件夹并重新运行该命令,但之后我将丢失所有以前的迁移。我认为当我们过渡到我们的测试和生产环境时,我们也会遇到同样的问题。

我在文档中看到Flask-Migrate支持多个数据库,但我认为这看起来更适合在单个开发环境中维护多个数据库。有没有办法让Flask-Migrate在多个开发环境中跟踪更改?

EN

回答 4

Stack Overflow用户

发布于 2019-06-29 17:01:43

要解决OP问题中的实际问题,您需要使用--directory标志来启动特定于每个环境的数据库的迁移目录。

在flask-migrate文档中:

目录所有命令还带有一个--

目录选项,该选项指向包含迁移脚本的目录。如果省略此参数,则使用的目录为migrations。

所以:

代码语言:javascript
复制
flask db init --directory=[DIRECTORY NAME]

--directory -Migrate本身没有数据库的内存,所以当使用Flask运行迁移命令时,它将引用指定的迁移目录(默认情况下,当不使用Flask标志时,这称为‘迁移’)。

代码语言:javascript
复制
flask db migrate --directory=[DIRECTORY_NAME]

等。

不用说,flask命令将引用由配置文件或环境变量配置的应用程序上下文。

我通常为每个环境创建一个迁移目录,并明确引用该环境:例如,开发和登台,使用类似'migrations_dev‘和'migrations_stg’的内容。

希望这能对你有所帮助。

票数 6
EN

Stack Overflow用户

发布于 2016-03-28 21:20:22

以下是我从SQLite过渡到MySQL并维护所有迁移历史记录所采取的步骤。我高度怀疑有更好的方法来做到这一点,但它对我很有效。

使用用于“新”迁移的另一个文件夹初始化新的空白数据库

代码语言:javascript
复制
python manage.py db init -d tmp

创建迁移

代码语言:javascript
复制
python manage.py db migrate -d tmp -m "Bring MySQL up to date"

应用迁移

代码语言:javascript
复制
python maange.py db upgrade -d tmp

现在,您可以删除"tmp“迁移文件夹。你不再需要它了。找到头部迁移。查找“Rev: your_revision_num (Head)”

代码语言:javascript
复制
python manage.py db show 

对MySQL数据库运行update语句

代码语言:javascript
复制
update alembic_version set version_num = 'your_revision_num'

现在,您的MySQL数据库模式应该与旧的SQLite模式匹配,并且您还将拥有完整的迁移历史记录。

票数 2
EN

Stack Overflow用户

发布于 2016-03-26 00:06:50

migrate_version用于按包sqlalchemy-migrate跟踪迁移。如您所知,Flask-Migrate使用的包Alembic使用alembic_version表。

所以我猜测,您要使用的这个MySQL数据库以前曾被一个处于sqlalchemy-migrate控制下的应用程序使用过。

我建议您删除MySQL数据库并创建一个全新的数据库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36208977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档