在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]
然后搜索'color'的colnames
然后我想我得到的行:
myrow = importCursor.fetchone()
但是如何获得该行的“颜色”值?
我试过color = importCursor.fetchone()['color']
但这不起作用。
如何获取该SELECT语句返回的行的颜色值?我不知道表中有多少列,或者'color'列总是列#3我必须为此表中的一堆列执行此操作(检查是否存在,如果存在,则返回列行的价值)所以一种有效的方法是最好的!
答案 0 :(得分:2)
如果您只选择某些列,那么您就知道了列顺序。
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
和{{}将列名映射到列号1}},比再次访问数据库要快得多。