首页 > 解决方案 > cx_oracle 7.2.1中转换execute_query结果集的方法

问题描述

我们正在尝试将我们的应用程序从 cx oracle 迁移到会话池会话中,但执行查询的返回池似乎有所不同。

cx oracle 版本是 7.2.1

有没有办法将结果转换为记录列表或集合/字典列表?

使用 Normal Session,返回的是Record 列表。使用会话池,返回的是tuple 列表

这是正常会话中的查询代码

def execute_query(self, sql_query, parameters=None):
        if parameters is None:
            self.cursor.execute(sql_query)
        else:
            self.cursor.execute(sql_query, parameters)

        result = self.cursor.fetchall()
        return result

这是会话池中查询的代码

def execute_query(self, sql_query, parameters=None):
        if parameters is None:
            self.cursor.execute(sql_query)
            self.cursor.rowfactory = lambda *args: dict(zip([d[0].lower() for d in self.cursor.description], args))
        else:
            self.cursor.execute(sql_query, parameters)
            self.cursor.rowfactory = lambda *args: dict(zip([d[0].lower() for d in self.cursor.description], args))

        result = self.cursor.fetchall()
        return result

谢谢你的帮助。

标签: pythoncx-oracle

解决方案


好吧,我的解决方案是使用sqlalchemyand cx_Oracle,使用sqlalchemycreate connectsession并执行 sql cmd:

result = self.session.execute(sql_cmd)
return [{k: v for k, v in row.items()} for row in result]

推荐阅读