如何修改Python cx_Oracle代码将查询结果集转为字典?
嘿,这个需求很常见,我来帮你调整代码,让fetch_data_from_db返回字典类型的结果~
解决方案
要实现返回字典类型的结果,核心是把查询结果的列名和每行的数值一一对应起来。cx_Oracle的游标提供了description属性,可以轻松获取查询结果的列信息,我们基于这个来做转换。
修改后的完整代码
import cx_Oracle class OracleDBConnection(object): def connect_oracle_db(self,connectionstring): con=None try: con = cx_Oracle.connect(connectionstring) return con except Exception as e: print(str(e.args)) print(str(e)) return str(e) #print con.version def fetch_data_from_db(self,con, query): curs = con.cursor() curs.execute(query) # 1. 提取查询结果的所有列名 column_names = [desc[0] for desc in curs.description] res = curs.fetchall() # 2. 将每行元组转换成字典,最终返回字典列表 return [dict(zip(column_names, row)) for row in res]
关键修改点说明
- 获取列名:
curs.description返回一个元组列表,每个元组的第一个元素就是对应列的名称,我们用列表推导式提取出所有列名。 - 转换为字典:用
zip(column_names, row)把列名和每行的数值一一配对,再通过dict()转换成字典,最后用列表推导式把所有行都处理成字典,组成列表返回。
这样调用fetch_data_from_db后,你得到的会是一个包含字典的列表,每个字典的键是数据库列名,值是对应行的数据,使用起来会比元组直观很多。
内容的提问来源于stack exchange,提问作者JCDani
相关产品推荐
相关产品推荐

