psycopg2, SELECT и схемы - PullRequest
       4

psycopg2, SELECT и схемы

0 голосов
/ 29 января 2011

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

psycopg2.ProgrammingError: отношение "dam_vector.parcels_full" не существует ЛИНИЯ 1: ВЫБРАТЬ * ОТ "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()

Ответы [ 2 ]

4 голосов
/ 09 марта 2011

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

SELECT * FROM "dam_vector.parcels_full";

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

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

SELECT * FROM dam_vector.parcels_full;

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

SELECT * FROM "dam_vector"."parcels_full";
1 голос
/ 29 января 2011

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

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

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