psycopg2.ProgrammingError: отношение "событие" не существует - PullRequest
0 голосов
/ 01 декабря 2018

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

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 Ответ

0 голосов
/ 02 декабря 2018

Я разобрался в проблеме.Вы можете использовать сценарии 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 / контексты /

...