2011-01-29 33 views
0

我正在尝试对属于“dam_vector”模式的表执行简单的select语句。我得到的错误是:psycopg2,SELECT和schemas

psycopg2.ProgrammingError: relation "dam_vector.parcels_full" does not exist 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

您不应该需要dam_vector.parcels_full附近的引号。

下面的输出是否显示parcels_full表确实存在?

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

双引号使得无论是在他们的标识符,所以查询

SELECT * FROM "dam_vector.parcels_full"; 

命中表dam_vector.parcels_full从沙玛public(或任何在搜索路径)(期间解释为表名的一部分)。

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

SELECT * FROM dam_vector.parcels_full; 

如果你真的想使用双引号,去为:

SELECT * FROM "dam_vector"."parcels_full";