0

「dam_vector」スキーマの一部であるテーブルに対して単純なselectステートメントを実行しようとしています。私が得るエラーは次のとおりです。

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";

スキーマ(または検索パス内のdam_vector.parcels_full任意のもの) からテーブル (テーブル名の一部として解釈されるピリオド) にヒットします。public

Adam が言ったように、特殊文字を含まない名前の引用符は必要ありません。試す:

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 に答える