【问题标题】:Alembic migration to convert serial field to integer将串行字段转换为整数的 Alembic 迁移
【发布时间】:2016-07-01 00:15:31
【问题描述】:

我最初将我的一个 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 在 Postgres 中将 SERIAL 转换为 INTEGER

【问题讨论】:

    标签: python postgresql sqlalchemy alembic


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      相关资源
      最近更新 更多