Запрос PostgreSQL дает неожиданный результат - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь сделать что-то чрезвычайно простое, что работает, но не так, как я ожидаю. У меня есть база данных с различными таблицами, и для каждой из этих таблиц я пытаюсь извлечь имена столбцов из информационной схемы. Я использую код ниже, и все работает как шарм (python):

import psycopg2 as pgsql

# code to connect and generate cursor

table = 'some_table_name'

query = 'SELECT column_name FROM information_schema.columns WHERE table_name = %s'

cursor.execute(query, (table,))
result = pd.DataFrame(cursor.fetchall())
print(result)

Пока все хорошо. Проблема возникает, когда я заменяю переменную запроса следующим:

import psycopg2 as pgsql

# code to connect and generate cursor

table = 'some_table_name'

**query = 'SELECT column_name FROM information_schema.columns WHERE table_name='+table

cursor.execute(query)**
result = pd.DataFrame(cursor.fetchall())
print(result)

Если я распечатываю инструкцию, она верна:

SELECT column_name FROM information_schema.columns WHERE table_name=some_table_name

Однако, когда я запускаю запрос, я 'получим это сообщение об ошибке:

UndefinedColumn: column "some_table_name" does not exist
LINE 1: ... FROM information_schema.columns WHERE table_name=some_tabl...

some_table_name - это имя таблицы в качестве параметра предложения WHERE, а не имя столбца. Как это вообще возможно?

Спасибо!

1 Ответ

0 голосов
/ 07 ноября 2019

Ваша проблема в том, что вы не поместили some_table_name в кавычки, поэтому он рассматривается как имя столбца, а не как строковый литерал. Почему бы не придерживаться первого метода, который работал и соответствует документации psycopg?

...