如何使用 Cx_Oracle Python 从 Oracle SQL 数据库中检索压缩数据?

How to retrieve compressed data from Oracle SQL database using Cx_Oracle Python?

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

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

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 和变量名称。

稍后,我在客户端映射值,这比发送具有重复数据的数百万行更省时。

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