Alembic列类型更改提供语法

2024-09-29 21:24:17 发布

您现在位置:Python中文网/ 问答频道 /正文

其中一个表的列类型从整数更改为字符串。在

Logic(PBase):
__tablename__ = "logic"
Id(Integer, primary_key=True)

此列已更改为字符串

^{pr2}$

现在我使用alembic自动生成迁移脚本。为了检测类型更改,我在中提供了compare_type=True环境保护在

 with connectable.connect() as connection:
    context.configure(
        connection=connection,
        target_metadata=target_metadata,
        compare_type=True
    )

这样,就可以很好地生成迁移脚本。以下是生成的迁移脚本的内容:

from alembic import op       # noqa
import sqlalchemy as sa      # noqa


def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.alter_column('logics', 'id',
                    existing_type=sa.INTEGER(),
                    type_=sa.String())
    ### end Alembic commands ###


def downgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.alter_column('logics', 'id',
                    existing_type=sa.String(),
                    type_=sa.INTEGER())
    ### end Alembic commands ###

但是当我运行upgrade命令时,我得到一个语法错误(这里是回溯的结束部分):

File "/Users/amit/.virtualenvs/be_new/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 436, in do_execute cursor.execute(statement, parameters) sqlalchemy.exc.OperationalError: (OperationalError) near "ALTER": syntax error u'ALTER TABLE logics ALTER COLUMN id TYPE VARCHAR' ()

这有什么问题吗?在


Tags: 字符串脚本idtrue类型sqlalchemytypesa
1条回答
网友
1楼 · 发布于 2024-09-29 21:24:17

我有一个类似的问题,我用以下语法解决了:

def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.alter_column('logics', 'id', type_=sa.String, existing_type=sa.INTEGER)
    ### end Alembic commands ###


def downgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.alter_column('logics', 'id', type_=sa.INTEGER, existing_type=sa.VARCHAR)
    ### end Alembic commands ###

实际上,我省略了类型声明后面的括号,并且在downgrade上使用了类型VARCHAR,因为{}不是SQL类型。在

相关问题 更多 >

    热门问题