Как проверить, существует ли столбец, если он есть, вернуть из него значение
В 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 name
1 является age
2 является 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
, что намного быстрее, чем снова попасть в базу данных.