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

时间:2018-04-01 17:56:43

标签: python cx-oracle

我使用cx_Oracle包从python调用PL / SQL存储过程。 PL / SQL存储过程返回SYS_REFCURSOR作为OUT参数。我能够获得REF_CURSOR的值,但是我无法获得列的名称以及值。

PFB我的代码

@Controller

fetchall()仅返回数组中的值,如

result_set = self.__cursor__.callproc(call_procedure, parameters)    
result_set[index].fetchall()

但我想要这样的东西

[
  "John",
  "B",
  "Doe",
  "111223333",
  "Fri, 09 May 1997 00:00:00 GMT",
  "212 Main St, Orlando, FL",
  "M",
  25000,
  "333445555"
]

1 个答案:

答案 0 :(得分:3)

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

# 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()]

也应该在SELECT陈述上有效。