14

我想使用 Alembic 将数据库的列类型从字符串更改为整数。如果我使用纯 SQL,它可以达到目标:

alter table statistic_ticket alter column tags type bigint using tags::bigint;

但是当我像这样使用 Alembic 时:

import sqlalchemy as sa
def upgrade():
    op.alter_column('statistic_ticket', 'tags', nullable = True, existing_type=sa.String(length=255), type_=sa.Integer, existing_nullable=True)

我收到一个错误:

HINT: Please use USING clause for carrying out the conversion

SQLAlchemy 生成的 SQL 语句是:

ALTER TABLE statistic_ticket ALTER COLUMN tags TYPE INTEGER' {}

有人可以通过 告诉我如何在 alembic 或 SQLAlchemy 中使用 SQLop.execute(SQL)吗?

4

1 回答 1

10

从 Alembic 0.8.8 开始,您可以使用postgresql_using关键字:

op.alter_column('statistic_ticket', 'tags', type_=sa.BigInteger,
                postgresql_using='tags::bigint')

在以前的版本中,您必须使用op.execute

op.execute('ALTER TABLE statistic_ticket ALTER COLUMN '
           'tags TYPE bigint USING tags::bigint')
于 2016-07-11T09:48:04.877 回答