0

我正在尝试对属于“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()

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

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()
4

2 回答 2

5

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

SELECT * FROM "dam_vector.parcels_full";

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

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

SELECT * FROM dam_vector.parcels_full;

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

SELECT * FROM "dam_vector"."parcels_full";
于 2011-03-09T13:12:08.983 回答
1

你不应该需要引号dam_vector.parcels_full

下面的输出是否表明parcels_full确实存在一个表?

cur.execute("""SELECT tablename 
                 FROM pg_tables 
                WHERE tablename NOT LIKE ALL (ARRAY['pg_%','sql_%']);""")
cur.fetchall()
于 2011-01-29T07:05:29.750 回答