У меня проблема с выполнением запроса с использованием python pgdb с использованием нескольких столбцов, чувствительных к регистру. Результаты большинства запросов возвращают список python, но если я выдаю запрос на таблицу с указанием нескольких регистров, чувствительных к регистру, результат будет string
.
Например, у меня есть таблица в базе данных PostgreSQL с 3 boolean
столбцами case-sensitve с именем:
(colA, colB, debug)
Если мне интересно выбрать более одного столбца, я получаю исходный результат string
из запроса:
query = 'SELECT ("colA", debug) FROM my_table;"
или
query = 'SELECT ("colA", "colB") FROM my_table;"
запрос вернется:
cursor.execute(query)
cursor.fetchone()
['(f,f)']
Выдавая следующий запрос:
query = "SELECT * FROM my_table;"
cursor.execute(query)
cursor.fetchone()
приводит к ожидаемому списку python:
[False, False, False]
и если я укажу один столбец в кавычках, ожидаемый результат:
query = 'SELECT ("colA") FROM my_table;'
cursor.execute(query)
cursor.fetchone()
[False]
Я надеюсь, что кто-то может указать мне в правильном направлении, чтобы понять, почему я получаю необработанную string
при выборе нескольких столбцов с чувствительностью к регистру. Я мог бы выпустить несколько запросов для решения моей проблемы или просто SELECT *
но для поддержания надежного кода и защиты от будущих изменений в таблице я бы предпочел указать мои столбцы.
Если вы заключите несколько кубов в круглых скобках, вы формируете тип ad-hoc-типа, в результате чего возвращается одно значение.
SELECT ("colA", "colB") FROM my_table;
Отбросьте парны, чтобы получить отдельные столбцы:
SELECT "colA", "colB" FROM my_table;
Если вы сомневаетесь в двойном цитировании, прочитайте главу об идентификаторах в руководстве. Мой постоянный совет заключается в использовании юридических, строчных идентификаторов только в PostgreSQL.