从python调用存储过程时获取列名和数据

从python调用存储过程时获取列名和数据,python,cx-oracle,Python,Cx Oracle,我使用cx\U Oracle包从python调用PL/SQL存储过程。PL/SQL存储过程将SYS\U REFCURSOR作为OUT参数返回。我能够获得REF_游标的值,但无法获得列的名称和值 我的代码 result_set = self.__cursor__.callproc(call_procedure, parameters) result_set[index].fetchall() fetchall()仅返回数组中的值,如 [ "John", "B", "Doe",

我使用cx\U Oracle包从python调用PL/SQL存储过程。PL/SQL存储过程将SYS\U REFCURSOR作为OUT参数返回。我能够获得REF_游标的值,但无法获得列的名称和值

我的代码

result_set = self.__cursor__.callproc(call_procedure, parameters)    
result_set[index].fetchall()
fetchall()仅返回数组中的值,如

[
  "John",
  "B",
  "Doe",
  "111223333",
  "Fri, 09 May 1997 00:00:00 GMT",
  "212 Main St, Orlando, FL",
  "M",
  25000,
  "333445555"
]
但是我想要这样的东西

{
  "FirstName": "John",
  "MInit": "B",
  "LastName": "Doe",
  "SSN": "111223333",
  "DOE": "Fri, 09 May 1997 00:00:00 GMT",
  "Addr": "212 Main St, Orlando, FL",
  "Sex": "M",
  "Sal": 25000,
  "DNO": "333445555"
}

您可以从
cursor.description
获取所有列名,并使用
zip()
函数构建目录列表:

# prepare cursor and execute procedure
conn = ...
cursor = conn.cursor()
cursor.callproc(...)

# get only column names from cursor description
column_names_list = [x[0] for x in cursor.description]

# construct a list of dict objects (<one table row>=<one dict>) 
result_dicts = [dict(zip(column_names_list, row)) for row in cursor.fetchall()]
#准备游标并执行过程
康涅狄格州=。。。
游标=连接游标()
cursor.callproc(…)
#从游标描述中仅获取列名
列名称列表=[x[0]表示游标中的x.description]
#构造dict对象的列表(=)
result_dicts=[dict(zip(column_names_list,row))用于cursor.fetchall()中的行]
SELECT
语句中也应有效