如何检查列是否存在,如果存在,则从中返回一个值

时间:2017-04-24 14:52:32

标签: python sql postgresql cursor psycopg2

在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我必须为此表中的一堆列执行此操作(检查是否存在,如果存在,则返回列行的价值)所以一种有效的方法是最好的!

1 个答案:

答案 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}},比再次访问数据库要快得多。