我正在尝试在“dam_vector”架构的一部分表上执行简单的select语句。我得到的错误是:
psycopg2.ProgrammingError:关系 “dam_vector.parcels_full”没有 存在LINE 1:SELECT * FROM “dam_vector.parcels_full”
我无法理解这一点,并且知道我错过了一些明显的东西。你能提供的任何帮助都会很棒。
这是我正在使用的代码。 db是一个成功连接到数据库的连接字符串。
cur = db.cursor()
query = 'SELECT * FROM "dam_vector.parcels_full"'
cur.execute(query)
results = cur.fetchall()
当失败并且在我对谷歌做了一些研究之后我尝试了这个。同样的错误。
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()
答案 0 :(得分:4)
双引号使其中的任何内容成为标识符,因此查询
SELECT * FROM "dam_vector.parcels_full";
从schama dam_vector.parcels_full
(或搜索路径中的任何内容)点击表public
(句号解释为表名称的一部分)。
正如亚当所说,你不需要带名字而不带一些特殊字符的引号。 尝试:
SELECT * FROM dam_vector.parcels_full;
如果您真的想使用双引号,请转到:
SELECT * FROM "dam_vector"."parcels_full";
答案 1 :(得分:1)
您不应该需要dam_vector.parcels_full
附近的引号。
以下输出是否表明确实存在parcels_full
表?
cur.execute("""SELECT tablename
FROM pg_tables
WHERE tablename NOT LIKE ALL (ARRAY['pg_%','sql_%']);""")
cur.fetchall()