我在Oracle中有一个数据库。我需要导出一些数据,对其进行处理,然后将数据保存到文件中。表中是oracle sdo_geom,我需要将几何转换为WKT format。几何图形确实很大,一个具有数千个顶点的大多边形。我正在使用SDO_UTIL.TO_WKTGEOMETRY()函数,但是花费的时间太长。在这种情况下,选择(转换几何)到数据库是一个瓶颈。
我考虑在Python中进行 multihreading 或 multiprocessing 。该方案应如下所示:
我正在使用fetchmany()
通过块选择数据:
def get_row_chunks(self):
while True:
rows = self.cursor.fetchmany()
if not rows:
break
yield rows
所以我的问题是,是否可以使用多线程或多处理以及如何解决此问题(使用cx_Oracle)或psycopg2(对于PostgreSQL),我认为这不是物。我认为这些库中的游标具有相同的行为。还是不可能轻松地在线程或进程之间共享游标。
可能的解决方案是在数据库中预生成WKT几何,但这在我看来是更通用的解决方案。
答案 0 :(得分:0)
您不能同时对cx_Oracle中的游标或连接执行多个动作。因此,例如,您不能同时进行提取。如果尝试这样做,您会发现fetches块。因此,我建议您仅在一个线程中执行获取,然后将获取的数据传递给另一个线程或多个线程进行处理。
另一种可能性是创建一个池,该池允许您创建多个连接并在多个线程中使用它们(创建池时使用threaded = True参数)。然后,您可以使用每个连接来查询数据的不同部分。