2013-09-20 5 views
2

У меня проблема с выполнением запроса с использованием pgdb python с использованием нескольких чувствительных к регистру столбцов. Результаты большинства запросов возвращают список python, но если я выдаю запрос к таблице с указанием нескольких регистров, чувствительных к регистру, результат будет string.case sensitve query возвращает строку вместо списка

Например, у меня есть таблица в базе данных PostgreSQL с 3 корпусных ВОСПРИИМЧИВ boolean столбцов имени:

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

результатов в ожидаемом списке питона:

[False, False, False] 

и если указать один столбец в кавычках результата является ожидается:

query = 'SELECT ("colA") FROM my_table;' 
cursor.execute(query) 
cursor.fetchone() 
[False] 

Я надеюсь, что кто-то может указать мне в правильном направлении, чтобы понять, почему я получаю необработанный string при выборе нескольких столбцов с чувствительностью к регистру. Я мог бы выпустить несколько запросов для решения моей проблемы или просто SELECT *, но для поддержания надежного кода и защиты от будущих изменений в таблице я бы предпочел указать мои столбцы.

ответ

1

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

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

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

SELECT "colA", "colB" FROM my_table; 

Если сомневаетесь в двойные кавычки, читать chapter about identifiers in the manual. Мой постоянный совет заключается в использовании юридических, строчных идентификаторов только в PostgreSQL.

Смежные вопросы