регистр чувствительного запроса возвращает строку вместо списка

2

У меня проблема с выполнением запроса с использованием 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 * но для поддержания надежного кода и защиты от будущих изменений в таблице я бы предпочел указать мои столбцы.

Теги:
case-sensitive
identifier

1 ответ

1
Лучший ответ

Если вы заключите несколько кубов в круглых скобках, вы формируете тип ad-hoc-типа, в результате чего возвращается одно значение.

SELECT ("colA", "colB") FROM my_table;

Отбросьте парны, чтобы получить отдельные столбцы:

SELECT "colA", "colB" FROM my_table;

Если вы сомневаетесь в двойном цитировании, прочитайте главу об идентификаторах в руководстве. Мой постоянный совет заключается в использовании юридических, строчных идентификаторов только в PostgreSQL.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню