sqlalchemy Oracle REF CURSOR

0 投票
1 回答
1222 浏览
提问于 2025-04-16 02:44

我正在使用sqlalchemy来进行连接池的管理(需要调用已有的存储过程),并想要返回一个REF CURSOR,这个是一个输出参数。

在sqlalchemy中似乎没有可以做到这一点的游标。

任何建议都非常感谢。

1 个回答

0

直觉上,你可能需要深入到比SQLAlchemy更底层的东西,比如它背后的cx_oracle类。

这是Gerhard Häring在另一个论坛上提供的一个回答:

import cx_Oracle 

con = cx_Oracle.connect("me/secret@tns") 
cur = con.cursor() 
outcur = con.cursor() 
cur.execute(""" 
BEGIN 
   MyPkg.MyProc(:cur); 
END;""", cur=outcur) 

for row in out_cur: 
print row 

我猜想,因为SQLAlchemy在背后使用了cx_oracle,所以应该有办法使用相同的连接池。

有没有可能在Oracle那边把返回REF CURSOR的函数包裹在一个视图里呢?(前提是REF CURSOR的结构不变,而且你能以某种方式把正确的参数传递给你的函数——可能通过把它们放在会话变量里,或者放在临时表中,这样应该是可行的——我用这种方法从一个只支持有限Oracle特性的语言中获取REF CURSOR函数的数据)。

撰写回答