psycopg2.ProgrammingError:关系“事件”不存在

时间:2018-11-30 21:42:35

标签: postgresql alembic flask-migrate

我将Alembic连同flask-migrate以及Postgres一起用于我的数据库。我已经运行了数据库初始化和数据库迁移。但是,当我运行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表,该表引用了稍后在脚本中创建的Event表。

我的问题是我之间有很多关系,我认为重新排列脚本中的每个表以进行构建都没有道理。 Alembic和flask-migrate不应该能够执行标准的创建表脚本,该脚本列出多个关系而不会失败,只要这些关系都在脚本中定义即可。这是我的Alembic脚本,有一些修改。

    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 :(得分:0)

我发现了问题。在db.create_all()完成后,您只能使用db init,迁移,更新脚本。

详细信息可以在这里找到:

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/