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

问题描述 投票:8回答:1

我正在尝试将主键字段的长度从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的所有部分必须为NOT NULL;如果在键中需要NULL,则使用UNIQUE')

python mysql alembic
1个回答
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'])
© www.soinside.com 2019 - 2024. All rights reserved.