Alembic:如何更改主键字段的长度?

时间:2019-02-24 16:51:41

标签: python mysql alembic

我正在尝试将主键字段的长度从3更改为6。

型号:

class Server(db.Model):
    country_code = db.Column(db.String(6), primary_key=True)

迁移:

def upgrade():
    op.alter_column('server', 'country_code',
               existing_type=mysql.VARCHAR(length=3),
               type_=sa.String(length=6))

但是我收到的是我不太理解的错误消息,为什么它认为我将其更改为null。

  

_mysql_exceptions.DataError:(1171,“ PRIMARY KEY的所有部分都必须为非NULL;如果密钥中需要NULL,请改用UNIQUE”)

1 个答案:

答案 0 :(得分:2)

您需要先删除列的主键属性,然后才能更改其数据类型。

def upgrade():
    # Drop primary key constraint.
    op.execute('ALTER TABLE user DROP PRIMARY KEY')

    # Change primary key type
    op.alter_column('server', 'country_code',
                    existing_type=mysql.VARCHAR(length=3),
                    type_=sa.String(length=6))

    # Re-create the primary key constraint
    op.create_primary_key(None, 'server', ['country_code'])