2011-01-29 68 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";