postgresql - yoyo migrations 将选定的迁移应用到 postgreSQL

标签 postgresql migration python-3.5

我正在使用 yoyo 迁移来修改数据库架构。 我想应用/回滚到 Postgre DB,而不是迁移文件夹中的所有“迁移”,而只是我选择的那些“迁移”。

比如我有001.test.py和002.test.py,我只想申请/回滚002.test.py,我该怎么做? 特别是如何在 python 代码中而不是在 shell 中执行这些操作?

Yoyo 的手册仅给出了一次执行所有迁移的示例:

from yoyo import read_migrations, get_backend

backend = get_backend('postgres://postgres:postgres@localhost/db_test')
migrations = read_migrations('/home/dfialkovskiy/dev/migrations')
backend.apply_migrations(backend.to_apply(migrations))
backend.rollback_migrations(migrations)

我想我需要这样的东西来选择要应用的迁移脚本:

backend.apply_migrations(backend.to_apply(migrations[1]))
backend.rollback_migrations(migrations[0])

(这个例子显然不行)

最佳答案

这实际上是溜溜球迁移的一个真正问题我遇到了同样的问题但我用下面给出的代码克服了这个问题,这解决了回滚或应用特定迁移。此示例仅用于应用迁移,但它可以以类似的方式应用于回滚。

backend = get_backend('postgres://postgres:postgres@localhost/db_test')
migrations = read_migrations('/home/dfialkovskiy/dev/migrations')
migrations_to_apply = backend.to_apply(migrations)
for pending_migration in migrations_to_apply:
    if pending_migration.id == os.path.splitext(sys.argv[1])[0].split('/')[-1]:
       backend.apply_one(pending_migration)

关于postgresql - yoyo migrations 将选定的迁移应用到 postgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44630641/

相关文章:

c++ - 返回成对 vector 或文本数组的 PostgreSQL C 扩展函数

arrays - pg 删除数组中的公共(public)部分

sql - 仅当 select 返回有效行时才从 select 插入表

vb6 - 比较 VB6.exe

Python:依次等待协程列表

postgresql - 无法连接到端口8080管理员(Postgres + Adminer Docker堆栈)

laravel-5 - Laravel 5 生产迁移——无法禁用迁移警告

migration - FlywayDB 忽略迁移中的子文件夹

python - 为什么 Python 中存在这种涉及异步的奇怪语法?

python - os.walk 目录名中的空列表是什么?