如何使用sqlalchemy和python调用refcursor返回类型的Oracle函数 功能如下所示: 调用上述函数

如何使用sqlalchemy和python调用refcursor返回类型的Oracle函数 功能如下所示: 调用上述函数,python,oracle,plsql,sqlalchemy,plsqldeveloper,Python,Oracle,Plsql,Sqlalchemy,Plsqldeveloper,这在SQLDeveloper中运行良好。 如何使用python和sqlalchemy调用相同的函数?我使用了cx\u Oracle而不是sqlalchemy,它成功了。结果输出与我对sqlalchemy的期望相同。我将函数转换为过程。 程序 使用python和cx_Oracle调用上述过程的代码 CREATE or replace function get_data(data_key integer) return sys_refcursor is result1 sys_refcursor;

这在SQLDeveloper中运行良好。
如何使用python和sqlalchemy调用相同的函数?

我使用了cx\u Oracle而不是sqlalchemy,它成功了。结果输出与我对sqlalchemy的期望相同。我将函数转换为过程。

程序 使用python和cx_Oracle调用上述过程的代码
CREATE or replace function get_data(data_key integer) return sys_refcursor 
is
result1 sys_refcursor;
BEGIN

open result1 for 'Select DISTINCT COL1
        FROM REF_TABLE
        where DATA_KEY='||data_key;

return result1;
END;
variable rc refcursor;
exec :rc :=get_data(30038);
print rc;
CREATE or replace procedure get_data(data_key in integer, result out 
sys_refcursor) as
BEGIN

open result for 'Select DISTINCT COL1
        FROM ref_table
        where DATA_KEY='||data_key;

END;
import cx_Oracle
import pandas as pd

conn = cx_Oracle.connect('system/<password>@127.0.0.1/XE')
cur = conn.cursor()

myvar = cur.var(cx_Oracle.CURSOR)
cur.callproc('get_data', (30038, myvar))
data = myvar.getvalue().fetchall()
if len(data) == 0:
    data = {}
df = pd.DataFrame(data, columns=[i[0] for i in myvar.getvalue().description])
print df
                      COL1
--------------------------
0                   219586
1                   246751
2                   228245
3                   244517
4                   220765
5                   243467
6                   246622
7                   222784