Добавить автоинкрементный столбец, который не является первичным ключом Alembic - PullRequest
0 голосов
/ 08 мая 2018

Я хочу добавить столбец с автоинкрементом, который не является первичным ключом к существующей базе данных MySQL.

Команда, введенная на сервере, необходимая для этой операции, следующая:

ALTER TABLE `mytable` ADD `id` INT UNIQUE NOT NULL AUTO_INCREMENT FIRST

Проблема, с которой я сталкиваюсь, заключается в том, как реплицировать это изменение таблицы посредством миграции Alembic. Я пробовал:

from alembic import op
import sqlalchemy as sa

def upgrade():
    op.add_column('mytable', sa.Colummn('id', sa.INTEGER(), 
                  nullable=False, autoincrement=True)

но когда я пытаюсь вставить строку следующей командой:

INSERT INTO `mytable` (`col1`, `col2`) VALUES (`bar`);

, где col1, col2 - столбцы, не допускающие значения NULL. Когда я вставляю эту запись, я ожидаю, что таблица автоматически сгенерирует для меня идентификатор.

ERROR 1364 (HY000): Field 'id' doesn't have a default value

Если я проверяю sql, автоматически сгенерированный Alembic, используя следующую команду:

alembic upgrade 'hash-of-revision' --sql

выплевывает, для данной ревизии:

ALTER TABLE mytable ADD COLUMN id INTEGER NOT NULL;

Это означает, что Alembic или SQLAlchemy игнорируют поле autoincrement при создании sql миграции.

Есть ли способ, которым я могу решить это? Или я могу установить миграцию на основе пользовательской команды sql?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...