Alembic是否可以应用于现有数据库,并且如果检测到它们已经存在,可以跳过创建/更改表/列吗?

问题描述 投票:0回答:1

我已经使用Alembic创建了一些迁移,这是一个非常有趣的工具。

在新的数据库上使用它就足够简单了,但是我们的用例是将这些迁移应用于现有的数据库,不仅要使它们“快速”运行,而且要确保例如更改表或列。通过phpmyadmin前端,或者如果已经存在一个表,它可以更正/创建。

这将是完美的,因为为该脚本创建的MigrationID随后将可以应用于我们拥有的任何数据库,无需跳过任何被认为正确的内容,就可以纠正任何不一致的情况,而无需创建重复项。

如上所述,可以通过降级和重新应用来修复使用Alembic构建的新数据库,但是我想知道是否可以对使用Alembic的现有数据库执行此操作。

供参考,这是第一个迁移代码示例,如果它有用的话。

"""create account table

Revision ID: bd4ec9e8afe8
Revises: 
Create Date: 2019-10-29 15:25:39.736234

"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects.mysql import TINYINT


# revision identifiers, used by Alembic.
revision = 'bd4ec9e8afe8'
down_revision = None
branch_labels = None
depends_on = None


def upgrade():

    op.create_table(
        'account',
        sa.Column('id', sa.Integer, primary_key=True, nullable=False),
        sa.Column('title', sa.String(150), nullable=False),
        sa.Column('description', sa.Text, nullable=False),
        sa.Column('uploads_allowed', TINYINT(), nullable=True),
        sa.Column('viewers_contact_details', TINYINT(), default=0),
    )

    op.alter_column('account', sa.Column('id', sa.Integer, nullable=False, autoincrement=True))



    # op.execute("""
    # CREATE TABLE `account` (
    # `id` int(11) NOT NULL,
    # `title` varchar(150) NOT NULL,
    # `description` text,
    # `uploads_allowed` tinyint(1) DEFAULT '0',
    # `viewers_contact_details` tinyint(1) DEFAULT '0'
    # );
    # """)




def downgrade():
    op.drop_table('account')
python mysql sqlalchemy alembic
1个回答
0
投票

您可以使用:]创建新的修订版

$

Alembic修订版-m“该修订版的某些说明”

然后将创建具有ID的修订文件。

根据您的更改填充升级和降级功能,然后运行以下命令:

$

淡啤酒升级头

这将对现有数据库进行更改。

© www.soinside.com 2019 - 2024. All rights reserved.