Flask Миграция: проблема при создании таблицы и использовании существующего Enum в базе данных. `create_type = False` не работает - PullRequest
0 голосов
/ 19 марта 2020

Я использую flask -migrate, SQLAlchemy и alembi c для управления моей базой данных. Я хочу создать новую таблицу в базе данных. В новой таблице есть столбец, в котором используется существующий Enum. Я прочитал много SO вопросов, что вы можете использовать существующий Enum с флагом create_type=False. Кажется, это не работает для меня. См. Функцию upgrade() в моем файле ревизии ниже.

def upgrade():
    op.create_table(
        'label',
        sa.Column('id', UUID(as_uuid=True), default=uuid4),
        sa.Column('labelText', sa.Text, nullable=False),  
        sa.Column('sourceCountry', sa.Enum('it', 'gb', 'gr', 'bg', 'pt', name='country', create_type=False), nullable=True),
        sa.PrimaryKeyConstraint('id'),
        sa.UniqueConstraint('id')

    )
    op.add_column('entity', sa.Column('labelId', UUID(as_uuid=True)))
    op.create_foreign_key(
        'fk_entity_label',
        'entity', 'label',
        ['labelId'], ['id'],
    )

Вот мои версии:

Flask==1.1.1
Flask-Ext==0.1
Flask-Migrate==2.5.3
Flask-Script==2.0.6
Flask-SQLAlchemy==2.4.1
alembic==1.4.1

Моя ошибка:

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.DuplicateObject) type "country" already exists

[SQL: CREATE TYPE country AS ENUM ('it', 'gb', 'gr', 'bg', 'pt')]
(Background on this error at: http://sqlalche.me/e/f405)

1 Ответ

0 голосов
/ 20 марта 2020

Нашел проблему. Я использовал sqlalchemy.Enum(), где я должен использовать вместо postgres.ENUM(). Изменения заставили все работать.

...