首页 > 解决方案 > Alembic:更新以前的版本是否有益?

问题描述

我是 Alembic 的新手,所以如果我遗漏了什么,我深表歉意,但我很难理解我的前任的一些方法。

我的前任(在我公司)在版本/目录中有一系列修订文件。如果需要更改数据库模式,他将对现有的修订文件进行更改并将其签入源代码控制。例如,要调整列的大小,将更改现有的 create_table() 函数,如下所示:

op.create_table(
    'mytable',
    id(),
    sa.Column('name', sa.VARCHAR(50)),

...对此:

op.create_table(
    'mytable',
    id(),
    sa.Column('name', sa.VARCHAR(100)),

有什么方法可以成为使用 Alembic 的有用或有益的方式,但我不知道,因为我是新手?这不是完全违背了使用 Alembic 的目的吗?

标签: alembic

解决方案


每当我们在下面创建新的修订文件时,它将是通用模式,即它将具有升级和降级功能。

"""create mytable table

Revision ID: 3975ea83b745
Revises:
Create Date: 2021-05-21 23:48:27.038406

"""

# revision identifiers, used by Alembic.
revision = '3975ea83b745'
down_revision = None
branch_labels = None

from alembic import op
import sqlalchemy as sa

def upgrade():
    # create table mytable
    pass

def downgrade():
    # drop table mytable if exists
    pass

更改现有脚本不是一个好习惯,因为您需要降级到相应的修订 ID(在这里您将丢失数据)并使用新更改再次升级,显然您不想降级生产中的完整版本。例如,在这种情况下,“mytable”将首先降级,然后用新的更改升级它。

作为 alembic,调用关系数据库的变更管理脚本。对于新更改,请创建新修订并在那里添加更改。所以在这种情况下,它将改变现有表的列的数据类型。


推荐阅读