首页 > 解决方案 > 如何使用 python 和 jdbc-driver 遍历大型 Oracle 数据库并将修改后的记录值存储在另一个表中?

问题描述

我有一个 Oracle 数据库,其中包含超过 500 万行,列类型为 varchar 和 blob。为了连接到数据库并读取记录,我使用带有 JDBC 驱动程序和库 JayDeBeApi 的 python 3.6。我想要实现的是读取每一行,对记录执行一些操作(例如使用正则表达式),然后将新记录值存储在新表中。我不想加载内存中的所有记录,所以我想做的是从数据库中获取它们,存储获取的数据,处理它,然后将其添加到另一个表中。目前我一次获取所有记录,例如前 1000 条,然后是下 1000 条,依此类推。这是我到目前为止所拥有的:

statement = "... a select statement..."
connection= dbDriver.connect(jclassname,[driver_url,username,password],jars,)
cursor = connection.cursor()
cursor.execute(statement)
fetched = cursor.fetchall()
for result in fetched:
    preprocess(result)
cursor.close()

我如何修改我的代码以获取结果以及将在另一个表中插入新值的第二条语句放在哪里?

标签: pythondatabaseoraclejdbc

解决方案


正如您所说,fetchall()在这种情况下是一个坏主意,因为它将所有数据加载到内存中。

为了避免这种情况,您可以迭代cursor对象本身:

cur.execute("SELECT * FROM test")
for row in cur:  # iterate over result set row by row
    do_stuff_with_row(row)
cur.close()

推荐阅读