psycopg2.ProgrammingError: отношение "событие" не существует

Я использую alembic вместе с flask-migrate вместе с Postgres для своей базы данных. Я запустил инициализацию db и мигрировал db. Однако, когда я запускаю команду db upgrade, я получаю следующую ошибку:

cursor.execute(statement, parameters)
psycopg2.ProgrammingError: relation "event" does not exist

The above exception was the direct cause of the following exception:

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

У меня вопрос, у меня много отношений, и я не думаю, что имеет смысл переставлять каждую таблицу в скрипте, чтобы заставить ее строить. Не должны ли alembic и flask-migrate выполнять стандартный сценарий создания таблицы, который перечисляет несколько взаимосвязей без сбоев, если все эти взаимосвязи определены в сценарии. Это мой алембический сценарий с некоторыми изменениями.

    op.create_table('attendee',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('user_id', sa.Integer(), nullable=False),
    sa.Column('event_id', sa.Integer(), nullable=False),
    sa.Column('event_plan_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['event_id'], ['event.id'], ),
    sa.ForeignKeyConstraint(['event_plan_id'], ['event_plan.id'], ),
    sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_table('event',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('event_name', sa.String(length=128), nullable=False),
    sa.Column('description', sa.String(length=128), nullable=False),
    sa.Column('organizer_id', sa.Integer(), nullable=False),
    sa.Column('location_id', sa.Integer(), nullable=False),
    sa.Column('attendee_id', sa.Integer(), nullable=False),
    sa.Column('group_chat_id', sa.Integer(), nullable=False),
    sa.Column('event_type_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['attendee_id'], ['attendee.id'], ),
    sa.ForeignKeyConstraint(['event_type_id'], ['event_type.id'], ),
    sa.ForeignKeyConstraint(['group_chat_id'], ['group_chat.id'], ),
    sa.ForeignKeyConstraint(['location_id'], ['location.id'], ),
    sa.ForeignKeyConstraint(['organizer_id'], ['user.id'], ),
    sa.PrimaryKeyConstraint('id')
    )

Чтобы ответить на очевидный вопрос, если я перемещаюсь по сценарию создания таблицы, он терпит неудачу за другой таблицей, потому что участник ссылается на 3 другие таблицы, и эти таблицы также ссылаются на другие таблицы, которые потерпят неудачу, если бы они были созданы первыми.

1 ответ

Я разобрался в проблеме. Вы можете использовать сценарии db init, migrate, update только после завершения db.create_all().

Подробности можно найти здесь:

http://flask-sqlalchemy.pocoo.org/2.3/quickstart/

Если вы получите следующую ошибку:

No application found. Either work inside a view function or push an  application context.

Проверьте следующую статью: http://flask-sqlalchemy.pocoo.org/2.3/contexts/

Другие вопросы по тегам