Alembic数据库迁移框架的离线扩展,用于SQLAlchemy
项目描述
alembic-offline是Alembic的一个扩展,用于增强SQLAlchemy迁移的离线功能
用法
分阶段迁移
alembic-offline 引入了一个辅助工具,允许实现分阶段迁移,例如那些步骤被划分为逻辑阶段的迁移。例如,您可以在代码部署前执行某些步骤,在部署后执行其他步骤。
在您的 alembic 配置文件(主部分)
phases = before-deploy after-deploy final default-phase = after-deploy
在您的版本文件
from sqlalchemy import INTEGER, VARCHAR, NVARCHAR, TIMESTAMP, Column, func
from alembic import op
from alembic_offline import phased, execute_script
from tests.migrations.scripts import script
revision = '1'
down_revision = None
@phased
def upgrade():
op.create_table(
'account',
Column('id', INTEGER, primary_key=True),
Column('name', VARCHAR(50), nullable=False),
Column('description', NVARCHAR(200)),
Column('timestamp', TIMESTAMP, server_default=func.now())
)
yield
op.execute("update account set name='some'")
yield
execute_script(script.__file__)
def downgrade():
pass
将生成 SQL 输出(适用于 sqlite)
-- Running upgrade -> 1
-- PHASE::before-deploy::;
CREATE TABLE account (
id INTEGER NOT NULL,
name VARCHAR(50) NOT NULL,
description NVARCHAR(200),
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
-- PHASE::after-deploy::;
update account set name='some';
-- PHASE::final::;
-- SCRIPT::scripts/script.py::;
INSERT INTO alembic_version (version_num) VALUES ('1');
如您所见,阶段被渲染为 SQL 注释以分隔迁移步骤,因此执行迁移的人可以看到它是哪个阶段的步骤。然而,如果迁移过程高度定制化,您可以使用以下描述的 alembic-offline API。 get_migration_data 以特殊形式返回迁移阶段,以便您可以自动化它们的执行。
任意脚本作为操作
对于复杂的迁移,仅执行 SQL 不足以完成,您可能还需要执行某些脚本。为此,存在特殊操作
from alembic_offline import execute_script
def upgrade():
execute_script('scripts/script.py')
如果您获取到迁移 SQL,它将以 SQL 注释的形式呈现
-- SCRIPT::scripts/script.py::;
对于执行迁移的人来说,它是可见的,他们可以手动执行脚本。然而,如果迁移过程高度定制化,您可以使用以下描述的 alembic-offline API。 get_migration_data 以特殊形式返回脚本迁移步骤,以便您可以自动化它们的执行。对于在线模式,脚本将通过 Python subprocess 模块作为子进程执行。
获取迁移数据
alembic-offline 提供了专门的 API 来以字典形式获取某些迁移数据
from alembic_offline import get_migration_data
from alembic.config import Config
config = Config('path to alembic.ini')
data = get_migration_data(config, 'your-revision')
assert data == {
'revision': 'your-revision',
'phases': {
'after-deploy': [
{
'type': 'mysql',
'script': 'alter table account add column name VARCHAR(255)'
},
{
'type': 'python',
'script': 'from app.models import Session, Account; Session.add(Account()); Session.commit()',
'path': 'scripts/my_script.py'
},
]
}
}
get_migration_data 需要设置 phases 和 default-phase 配置选项。需要 default-phase 以便即使在没有阶段的简单迁移中也能获取迁移数据。
批量获取迁移数据
alembic-offline 提供了一个 API 调用来获取所有修订版本的迁移数据
from alembic_offline import get_migrations_data
from alembic.config import Config
config = Config('path to alembic.ini')
data = get_migrations_data(config)
assert data == [
{
'revision': 'your-revision',
'phases': {
'after-deploy': [
{
'type': 'mysql',
'script': 'alter table account add column name VARCHAR(255)'
},
{
'type': 'python',
'script': 'from app.models import Session, Account; Session.add(Account()); Session.commit()',
'path': 'scripts/my_script.py'
},
]
}
}
]
联系方式
如果您有任何问题、错误报告、建议等,请在 GitHub 项目页面 上创建问题。
许可协议
本软件遵循 MIT 许可协议
© 2015 Anatoly Bubenkov, Paylogic International 及其他人。
项目详情
alembic_offline-2.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d0474a20b052709602107850322874f0a9a82c316c389711d475f8906f4cfd14 |
|
MD5 | d6c435a365c9704238008ebd0d1b832a |
|
BLAKE2b-256 | ee80c972b6c3ae03371623bb773cc6852b36b40e20ba9f9b87a2d4b1db0eff1b |
alembic_offline-2.0.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5e04a61a7e57de3ae71d9b7874352f6cd9781d8b92bf4e3f349e09360f26b121 |
|
MD5 | ed20d3e0ed251d02f469be39bb0fe4b7 |
|
BLAKE2b-256 | bb278511841b8da07cffb8877f3b0e5725afb901ab15feb401f0d3c813d9687d |