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

Python 如何检查列是否存在,如果存在,则从中返回值,python,sql,postgresql,cursor,psycopg2,Python,Sql,Postgresql,Cursor,Psycopg2,在psycopg2中,如果我有一个表: +---+---+----+ |姓名|年龄|颜色| +---+---+----+ |鲍勃| 25 |红| |比尔| 50 |蓝| |简| 45 |黑| +---+---+----+ 如果我从mySchema.this\u表限制1中选择cursor.executeSELECT* 然后,我检查颜色是否存在: colnames=[desc[0]表示游标中的desc.description] 然后在ColName中搜索“颜色” 然后,我想我会对以下内容产生

在psycopg2中,如果我有一个表:

+---+---+----+ |姓名|年龄|颜色| +---+---+----+ |鲍勃| 25 |红| |比尔| 50 |蓝| |简| 45 |黑| +---+---+----+ 如果我从mySchema.this\u表限制1中选择cursor.executeSELECT* 然后,我检查颜色是否存在: colnames=[desc[0]表示游标中的desc.description] 然后在ColName中搜索“颜色”

然后,我想我会对以下内容产生争议: myrow=importCursor.fetchone

但如何获得该行的“颜色”值? 我尝试了color=importCursor.fetchone['color'] 但这不起作用

如何获取SELECT语句返回的行的颜色值?我不知道表中有多少列,或者“color”列是否总是第3列,我必须对表中的一组列执行此操作检查是否存在,如果存在,则返回行的列值,因此最有效的方法是

只选择一些列 如果只选择某些列,则您知道列顺序

cursor.execute从mySchema中选择名称、年龄、颜色。此\u表限制1 现在您知道列0是名称,1是年龄,2是颜色。因此,您可以选择具有类似myrow[1]的内容的选项

首先获取列的映射 您可以获取返回列的映射,然后使用该映射确定从何处获取

列名称=[desc[0]表示游标中的desc.description] 如果列名称中有“颜色”: color=cursor.fetchOne[列名称.索引'color']
这应该是相对高效的,因为在查询后只需要计算一次列名列表,然后就可以使用简单的列表操作(如index和in)将列名映射到列编号,这比再次访问数据库要快得多。

cursor.execute'select color from myschema.This_table limit 1',color=cursor.fetchallDan,感谢您的回复。不过,这对我来说不太管用,因为我并不总是肯定专栏的存在。因此,首先我实际执行select*,然后使用cursor.description搜索列名。然后,如果我找到它,我需要检查它的值。@Acoustic77查看更新的答案。我添加了一种获取列名映射的方法,然后使用该方法来确定只有在列存在时才需要阻塞哪个列。希望这更符合你的要求。。。