首页 > 解决方案 > 如何使用 Cx_Oracle Python 从 Oracle SQL 数据库中检索压缩数据?

问题描述

假设我正在执行一个非常复杂的查询,并且我想使用 Python 中的 Cx_Oracle 检索查询结果。

现在我使用这些行检索数据:

result = cur_out.getvalue()
raw_data = result.fetchall()

当我看到 raw_data 里面有什么时,我得到了一个非常大的包含查询结果的元组列表(数百万个观察值)。这些结果没有被压缩:

raw_data = [("Renult Kangoo 2008", "SPEED", 123),
            ("Renult Kangoo 2008", "SPEED", 125),
            ("Renult Kangoo 2008", "WEIGH", 1231),
            ("Renult Kangoo 2008", "SPEED", 112)..]

正如你所看到的,通过创建对应的字典可以很容易地压缩这些数据

{"Renult Kangoo 2008":1,
 "SPEED":2,
 "WEIGHT"3}

现在,我将不再使用重复字符检索一百万个观察值,而是使用重复数字,这将使数据传输更小,并降低检索所有数据的速度。

我想实现诸如 zip 或 rar 压缩之类的东西。这是在 Cx_Oracle 模块中以某种方式实现的吗?

如果没有,是否有任何解决方法可以解决此问题并提高数据传输效率。

当前的解决方法

现在我只在一个查询中检索汽车 ID 和变量 ID,以及它们的值。

在其他查询中,我正在检索汽车 ID 和汽车名称,在其他查询中,我检索变量 ID 和变量名称。

后来,在客户端上,我映射了比发送数百万行重复数据更耗时的值。

标签: pythoncompressioncx-oracle

解决方案


您可以在查询中进行各种映射以返回不同的值,例如使用 CASE 或 REPLACE 子句或其他子句。您还可以在 PL/SQL 块中进行各种映射。


推荐阅读