我如何编程设置通过蒸馏器与命令API使用所需要的“target_metadata”?(How can

2019-10-21 14:22发布

我在管理与数据库迁移蒸馏器 ,并想用所产生的默认文件alembic init没有任何修改env.py (例如, 设置target_metadata )或alembic.ini (例如, 设置sqlalchemy.url )来管理我的迁移数据库中的脚本。

例如,我想使用一个命令基于脚本如下所示:

import os

from alembic.config import Config
from alembic import command
from myapp import db

alembic_cfg = Config(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'alembic.ini'))
alembic_cfg.set_main_option("sqlalchemy.url",
                            os.environ['DATABASE_URL'])
alembic_cfg.set_main_option("script_location",
                            os.path.join(os.path.abspath(os.path.dirname(__file__)), '.db_migrations'))
alembic_cfg.set_main_option("target_metadata", db.metadata) # This doesn't work!

command.revision(alembic_cfg, message='Test of new system', autogenerate=True)
command.upgrade(alembic_cfg, 'head')

这所有的作品根据需要, 除了指定的线路出现故障时,我没有看到一个方法来设置target_metadata (不是编辑其他env.py )。

我如何编程设置target_metadata中(像)上面的脚本由蒸馏器需要,它采用蒸馏器的命令API?

Answer 1:

长的答复是,你没有设置的元数据在那里,在创建时设置MigrationContext 。 这就要求你创建一个Config ,然后ScriptDirectory ,那么EnvironmentContext第一。 然后,你需要正确地使用这些对象运行的修订来设置自己的环境时。

简短的回答是,有两个扩展(据我所知),该烧瓶的SQLAlchemy与蒸馏器集成为您服务。 烧瓶迁移已经存在了一段时间,并提供几乎从周围的蒸馏器的基本命令直包装。

烧瓶蒸馏器 (由我写的)(不相关的,是不是在发展中的同名旧的项目)提供了瓶和蒸馏器更紧密的集成。 它暴露了蒸馏器的内部,并与瓶开发版本的作品,但更新,更实验。

他们都积极维护。 如果您需要获得在内部,选择瓶,蒸馏器。 如果你只需要的命令,选择烧瓶迁移。



文章来源: How can I programmatically set the 'target_metadata' required by Alembic for use with the command API?