Alembic迁移将串行字段转换为整数

时间:2016-03-15 13:53:46

标签: python postgresql sqlalchemy alembic

我最初将我的一个SQLAlchemy模型定义为:

class StreetSegment(db.Model):
    id = db.Column(db.Integer, autoincrement=True)    # surrogate ID
    seg_id = db.Column(db.Integer, primary_key=True)  # assigned in another system; don't increment

没有意识到seg_id会成为我的Postgres数据库中的SERIAL字段。我真正想要的是具有PK约束的INTEGER字段(没有自动增量)。我这样关掉了自动增量:

class StreetSegment(db.Model):
    id = db.Column(db.Integer, autoincrement=True)
    seg_id = db.Column(db.Integer, primary_key=True, autoincrement=False)  # <--- see here

但是当我在Alembic中运行migrate时,没有反映出这种变化。我也尝试过使用以下操作编写自定义迁移:

def upgrade():
    op.alter_column('street_segment', 'seg_id', autoincrement=False)

def downgrade():
    op.alter_column('street_segment', 'seg_id', autoincrement=True)

但是会发出警告autoincrement and existing_autoincrement only make sense for MySQL。所以我的问题是:在Postgres中有没有办法使用Alembic将SERIAL转换为INTEGER

1 个答案:

答案 0 :(得分:1)

只需将类型明确设置为您想要的类型即可。这应该有效:

op.alter_column('street_segment', 'seg_id', _type=Integer)