我正在使用 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/