0 0

使用django的数据库连接调用oracle存储过程报异常的解决方法20

一个老的系统,DAO基本是存储过程实现,因此django的模型很难使用,就直接调过程了。但利用django1.2.5的数据库连接调用oracle存储过程会报Variable_TypeByValue(): unhandled data type VariableWrapper
代码如下:
from django.db import connection   
from mysite.aop import transaction

@transaction
def callproc(id,comment):
    import cx_Oracle 
    cursor = connection.cursor()
    result=cursor.var(cx_Oracle.STRING)
    cursor.callproc("act14_pck.vote_submit",(id,comment,result))
    return result.getvalue() 

@transaction()是自定义的装饰器,用来提交或者回滚数据的
代码如下:
def transaction(func):
    def _transaction(*args):
        from django.db import transaction 
        try:
            obj = func(*args)
            transaction.commit()
            return obj
        except Exception,e:
            transaction.rollback() 
            raise e      
    return _transaction

执行这个会报异常Variable_TypeByValue(): unhandled data type VariableWrapper
后来查看了django的代码,将django/db/backends/oracle/base.py 647行
return VariableWrapper(self.cursor.var(*args))
改为
sreturn self.cursor.var(*args)
问题得到解决,但我是初学者,不知道这样的修改靠谱吗?
2011年3月22日 17:58

1个答案 按时间排序 按投票排序

0 0

最好问问你们老大

2011年4月07日 22:34

相关推荐

Global site tag (gtag.js) - Google Analytics