Как проверить, существует ли столбец, если он есть, вернуть из него значение

В psycopg2, если у меня есть таблица:

+------+-----+-------+  
| name | age | color |  
+------+-----+-------+  
| Bob  |  25 | red   |  
| Bill |  50 | blue  |  
| Jane |  45 | black |  
+------+-----+-------+

Если я сделаю cursor.execute("SELECT * FROM mySchema.this_table LIMIT 1")тогда я проверяю, существует ли цвет с:colnames = [desc[0] for desc in cursor.description]тогда ищите названия для цвета

тогда я думаю, что получаю строку с:myrow = importCursor.fetchone()

но как мне получить значение 'color' для этой строки? Я старался color = importCursor.fetchone()['color']но это не работает

Как получить значение цвета строки, возвращаемой этим оператором SELECT? Я не знаю, сколько столбцов в таблице, или если столбец "color" всегда будет столбцом № 3, я должен сделать это для группы столбцов в этой таблице (проверьте, существует ли, если есть, вернуть столбец значение строки) так эффективный способ лучше!

1 ответ

Решение

Выберите только несколько столбцов

Если вы выбираете только определенные столбцы, то вы знаете порядок столбцов.

cursor.execute("SELECT name, age, color FROM mySchema.this_table LIMIT 1")

Теперь вы знаете, что столбец 0 name1 является age2 является color, Таким образом, вы можете выбрать, что с чем-то вроде myrow[1],

Сначала получите карту столбцов

Вы можете получить карту возвращенных столбцов, а затем использовать ее, чтобы выяснить, где выбрать.

column_names = [desc[0] for desc in cursor.description]
if 'color' in column_names:
    color = cursor.fetchOne()[column_names.index('color')]

Это должно быть относительно эффективно, потому что вам нужно вычислять список имен столбцов только один раз после запроса, а затем вы можете сопоставить имя столбца с номером столбца с помощью простых операций со списком, таких как index а также in, что намного быстрее, чем снова попасть в базу данных.

Другие вопросы по тегам