为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Python 中模拟 cx_Oracle 游标

如何在 Python 中模拟 cx_Oracle 游标

Helenr 2021-06-16 17:13:16
我在一个类中有两个以下函数,我需要模拟数据库连接和游标结果。cx_Oracle.connect 成功修补它按预期工作。但是游标、callfunc、fetch_all 不会被模拟。知道什么是正确的语法吗?class dbconnect:    def db_connect(self, connection_details):        connection = cx_Oracle.connect(user_name,pwd,<connection_string>)        return connection    def execute_function(self, sqlFunction, args):        cursor = self.connection.cursor()        res=cursor.callfunc(sqlFunction, cursor.var(cx_Oracle.CURSOR), args)        results = {'headers' : [x[0] for x in res.description],            'data': res.fetchall()        }        cursor.close()        return results我的模拟代码with mock.patch('dbconnect.cx_Oracle.connect') as mockOracle:   result_set = {}   mockOracle.cursor.callfunc.fetch_all = result_set
查看完整描述

1 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

您实际上根本不必“模拟”连接和光标!您可以自己简单地对连接和游标进行子类化,如下所示:


class MyConnection(cx_Oracle.Connection):


    def cursor(self, scrollable=False):

        return MyCursor(self, scrollable)


class MyCursor(cx_Oracle.Cursor):


    def execute(self, sql, args):

        result = super(MyConnection, self).execute(sql, args)

        print("My mock execute...")

        return result

我不确定这是否是您的意图,或者您是否知道这种可能性。有了它,您可以添加新功能,也可以覆盖或扩展现有功能。


查看完整回答
反对 回复 2021-06-22
  • 1 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信