我已经使用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')
您可以使用:]创建新的修订版
$
Alembic修订版-m“该修订版的某些说明”然后将创建具有ID的修订文件。
根据您的更改填充升级和降级功能,然后运行以下命令:
$
淡啤酒升级头这将对现有数据库进行更改。