无法使用 Alembic 和 SQLAlchemy 将 String(250) 的长度更改为 String

Vip*_*pin 8 python sqlalchemy alembic

我想改变从

description = Column(String(250))

description = Column(String)

当我使用以下命令生成迁移文件时,它变空。

alembic revision --autogenerate -m "Changing the column size"

生成的迁移文件:

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    pass
    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    pass
    # ### end Alembic commands 

Run Code Online (Sandbox Code Playgroud)

注意:我已经compare_type=True在 alembic 中有设置

context.configure(connection=connection, target_metadata=target_metadata, compare_type=True)

当我改为String(250)toString(500)而不是String(250)to时String,它会生成具有 alter 功能的迁移文件,似乎 alembic 不支持它!

任何帮助表示赞赏。

提前致谢!

Gor*_*son 10

如果 Alembic 无法检测到从String(250)到 的更改String(),那么您必须像这样解决它:

\n

将模型中的列更改为String(251)并运行

\n
alembic revision --autogenerate -m "Modified description column"\n
Run Code Online (Sandbox Code Playgroud)\n

生成一个修订文件,其中包含类似的内容

\n
def upgrade():\n    # ### commands auto generated by Alembic - please adjust! ###\n    op.alter_column(\'table1\', \'description\',\n               existing_type=sa.VARCHAR(length=250, collation=\'SQL_Latin1_General_CP1_CI_AS\'),\n               type_=sa.String(length=251),\n               existing_nullable=True)\n    # ### end Alembic commands ###\n\n\ndef downgrade():\n    # ### commands auto generated by Alembic - please adjust! ###\n    op.alter_column(\'table1\', \'description\',\n               existing_type=sa.String(length=251),\n               type_=sa.VARCHAR(length=250, collation=\'SQL_Latin1_General_CP1_CI_AS\'),\n               existing_nullable=True)\n    # ### end Alembic commands ###\n
Run Code Online (Sandbox Code Playgroud)\n

编辑该文件以将新列类型更改为String()\xe2\x80\xa6

\n
def upgrade():\n    # ### commands auto generated by Alembic - please adjust! ###\n    op.alter_column(\'table1\', \'description\',\n               existing_type=sa.VARCHAR(length=250, collation=\'SQL_Latin1_General_CP1_CI_AS\'),\n               type_=sa.String(),\n               existing_nullable=True)\n    # ### end Alembic commands ###\n\n\ndef downgrade():\n    # ### commands auto generated by Alembic - please adjust! ###\n    op.alter_column(\'table1\', \'description\',\n               existing_type=sa.String(),\n               type_=sa.VARCHAR(length=250, collation=\'SQL_Latin1_General_CP1_CI_AS\'),\n               existing_nullable=True)\n    # ### end Alembic commands ###\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\xa6 并编辑您的模型以供使用String()。然后运行迁移

\n
alembic upgrade head\n
Run Code Online (Sandbox Code Playgroud)\n

当我使用 SQL Server 对此进行测试时,它将列类型从 更改varchar(250)varchar(MAX)

\n