Alembic: Как изменить длину поля первичного ключа? - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь изменить длину поля первичного ключа с 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))

Однако я получаю это сообщение об ошибке, которое я не совсем понимаю, почему он думает, что я изменяю его на ноль.

_mysql_exceptions.DataError: (1171, 'Все части PRIMARY KEY должны быть НЕ NULL; если вам нужен NULL в ключе, используйте UNIQUE вместо этого')

1 Ответ

0 голосов
/ 24 февраля 2019

Вам необходимо удалить свойство первичного ключа столбца, прежде чем вы сможете изменить его тип данных.

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'])
...