psycopg2, SELECT и схемы

Я пытаюсь сделать простой оператор выбора для таблицы, которая является частью схемы "dam_vector". Ошибка, которую я получаю:

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

и когда это не удалось, и после того, как я провел некоторое исследование в Google, я попробовал это. Та же ошибка.

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

person cds-mewald    schedule 29.01.2011    source источник


Ответы (2)


Двойные кавычки делают все, что в них содержится, идентификатором, поэтому запрос

SELECT * FROM "dam_vector.parcels_full";

попадает в таблицу dam_vector.parcels_full (точка интерпретируется как часть имени таблицы) из схемы public (или чего-либо в пути поиска).

Как сказал Адам, вам не нужны кавычки с именами без специальных символов. Пытаться:

SELECT * FROM dam_vector.parcels_full;

Если вы действительно хотите использовать двойные кавычки, сделайте следующее:

SELECT * FROM "dam_vector"."parcels_full";
person Paweł Płazieński    schedule 09.03.2011

Вам не нужны кавычки вокруг dam_vector.parcels_full.

Показывает ли вывод следующего, что таблица parcels_full действительно присутствует?

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