我正在尝试将主键字段的长度从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”)
答案 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'])