Alembic 迁移以将串行字段转换为整数
Alembic migration to convert serial field to integer
我最初将我的一个 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
。所以我的问题是:有什么方法可以使用 Alembic 将 SERIAL
转换为 Postgres 中的 INTEGER
?
只需将类型明确设置为您想要的类型即可。这应该有效:
op.alter_column('street_segment', 'seg_id', _type=Integer)
我最初将我的一个 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
。所以我的问题是:有什么方法可以使用 Alembic 将 SERIAL
转换为 Postgres 中的 INTEGER
?
只需将类型明确设置为您想要的类型即可。这应该有效:
op.alter_column('street_segment', 'seg_id', _type=Integer)