python - 为什么我会收到带有 sqlalchemy 元数据的现有表的 "relation does not exist"错误?

标签 python postgresql sqlalchemy

我有以下代码会抛出以下错误

engine = create_engine('postgresql+psycopg2:....', convert_unicode=True)

metadata = sqlalchemy.MetaData()
table = sqlalchemy.Table('omni.all_order', metadata,
    sqlalchemy.Column('o_id', sqlalchemy.Integer),
    sqlalchemy.Column('order', sqlalchemy.String),

)

ins = table.insert().values(all_rows)
engine.execute(ins)

sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) relation "omni.all_order" does not exist

但是下面两段代码可以正常工作

engine = create_engine('postgresql+psycopg2:....', convert_unicode=True)

    result = engine.execute("SELECT * from omni.all_order ")
    rows = result.fetchall()
    print(rows)

--

 engine = create_engine('postgresql+psycopg2:....', convert_unicode=True)

    engine.execute("INSERT INTO omni.all_order (o_id) VALUES (1) ")

首先在相同模式(omni)中创建另一个表会引发相同的错误

engine = create_engine('postgresql+psycopg2:....', convert_unicode=True)

    result = engine.execute("CREATE TABLE omni.all_order_s(o_id INT, order VARCHAR(80))")

    metadata = sqlalchemy.MetaData()
    table = sqlalchemy.Table('omni.all_order_s', metadata,
        sqlalchemy.Column('o_id', sqlalchemy.Integer),
        sqlalchemy.Column('order', sqlalchemy.String),

    )

    ins = table.insert().values(all_rows)
    engine.execute(ins)

sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) relation "omni.all_order_s" does not exist

但在模式之外创建它工作正常

engine = create_engine('postgresql+psycopg2:....', convert_unicode=True)

    result = engine.execute("CREATE TABLE all_order_s(o_id INT, order VARCHAR(80))")

        metadata = sqlalchemy.MetaData()
        table = sqlalchemy.Table('all_order_s', metadata,
            sqlalchemy.Column('o_id', sqlalchemy.Integer),
            sqlalchemy.Column('order', sqlalchemy.String),

        )

        ins = table.insert().values(all_rows)
        engine.execute(ins)

知道这是为什么吗?

最佳答案

使用 schema= 传递表的架构关键字参数而不是将其包含在表的名称中:

table = sqlalchemy.Table('all_order', metadata,
    sqlalchemy.Column('o_id', sqlalchemy.Integer),
    sqlalchemy.Column('order', sqlalchemy.String),
    schema='omni',
)

目前是整体引用的。

关于python - 为什么我会收到带有 sqlalchemy 元数据的现有表的 "relation does not exist"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49952752/

相关文章:

sql - 对WITH 子句中的表使用 INTERSECT

ruby-on-rails - rake 数据库 :migrate and db:create not operated with proper database files

python - SQLAlchemy - 将模型子类定义为表的子集

python - polymorphic_on 可以在多于一列上使用吗?

python - Pandas read_csv 将字符串转换为日期时间并保存到数据库 Python

python - Windows 命令行区分大小写排序

python - 有什么办法可以使这段代码更快?

python - 如何使 Bokeh 工具提示中的文本正确换行?

python - 为什么导入无法解决?

java - Hibernate、PostgreSQL 9 的 JPA NamedNativeQuery 语法错误