【问题标题】:psycopg2, SELECT, and schemaspsycopg2、SELECT 和模式
【发布时间】:2011-04-16 00:08:28
【问题描述】:

我正在尝试对属于“dam_vector”模式的表执行一个简单的选择语句。我得到的错误是:

psycopg2.ProgrammingError: 关系 “dam_vector.parcels_full”没有 存在第 1 行:SELECT * FROM "dam_vector.parcels_full"

我无法弄清楚这一点,并且知道我遗漏了一些明显的东西。您能提供的任何帮助都会很棒。

这是我正在使用的代码。 db是一个成功连接数据库的连接字符串。

cur = db.cursor()
query = 'SELECT * FROM "dam_vector.parcels_full"'
cur.execute(query)
results = cur.fetchall()

当失败时,在我对 Google 做了一些研究之后,我尝试了这个。同样的错误。

cur.execute("SET search_path TO dam_vector,public")
db.commit()

cur = db.cursor()
query = 'SELECT * FROM "parcels_full"'
cur.execute(query)
results = cur.fetchall()

【问题讨论】:

    标签: python psycopg2


    【解决方案1】:

    双引号使其中的任何内容成为标识符,因此查询

    SELECT * FROM "dam_vector.parcels_full";
    

    从 schama public(或搜索路径中的任何内容)中命中表 dam_vector.parcels_full(句点解释为表名的一部分)。

    正如亚当所说,你不需要没有特殊字符的名字的引号。 试试:

    SELECT * FROM dam_vector.parcels_full;
    

    如果您真的想使用双引号,请使用:

    SELECT * FROM "dam_vector"."parcels_full";
    

    【讨论】:

      【解决方案2】:

      dam_vector.parcels_full 周围不需要引号。

      以下输出是否表明确实存在parcels_full 表?

      cur.execute("""SELECT tablename 
                       FROM pg_tables 
                      WHERE tablename NOT LIKE ALL (ARRAY['pg_%','sql_%']);""")
      cur.fetchall()
      

      【讨论】:

        猜你喜欢
        • 2013-11-16
        • 1970-01-01
        • 2021-08-17
        • 2018-10-24
        • 1970-01-01
        • 2013-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多