python - 使用cx_oracle批量下载表

标签 python cx-oracle

我需要使用 cx_oracle 将一个大表从 oracle 数据库下载到 python 服务器中。但是,python 服务器上的内存受到限制,因此我需要以批处理方式执行此操作。

我已经知道如何制作整个表格

usr = ''
pwd = ''
tns = '(Description = ...'
orcl = cx_Oracle.connect(user, pwd, tns)
curs = orcl.cursor()
printHeader=True
tabletoget = 'BIGTABLE'
sql = "SELECT * FROM " + "SCHEMA." + tabletoget
curs.execute(sql)
data = pd.read_sql(sql, orcl)
data.to_csv(tabletoget + '.csv' 

我不知道该怎么做,例如一次加载一批 10000 行,然后将其保存到 csv,然后重新加入。

最佳答案

您可以直接使用cx_Oracle来执行此类批处理:

curs.arraysize = 10000
curs.execute(sql)
while True:
    rows = cursor.fetchmany()
    if rows:
        write_to_csv(rows)
    if len(rows) < curs.arraysize:
        break

如果您使用的是 Oracle Database 12c 或更高版本,您还可以使用 OFFSET 和 FETCH NEXT ROWS 选项,如下所示:

offset = 0
numRowsInBatch = 10000
while True:
    curs.execute("select * from tabletoget offset :offset fetch next :nrows only",
            offset=offset, nrows=numRowsInBatch)
    rows = curs.fetchall()
    if rows:
        write_to_csv(rows)
    if len(rows) < numRowsInBatch:
        break
    offset += len(rows)

此选项不如第一个选项有效,并且需要为数据库提供更多工作要做,但根据您的情况,它可能更适合您。

这些示例都没有直接使用 pandas。我对那个包不是特别熟悉,但是如果您(或其他人)可以适本地调整它,希望这会有所帮助!

关于python - 使用cx_oracle批量下载表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57315171/

相关文章:

python - 如何使用python从多个json文件中提取信息

python - 如何使用python将控件C发送到Mac终端?

python-3.x - Python脚本中Oracle客户端的重要性是什么?

oracle - 具有 Windows 身份验证的 cx_Oracle

python - 如何在 Python 中对象的模拟方法中调用 self?

python - 在 Python2 和 Python3 中写入不同的十六进制值

python - 查找 sklearn 决策树分类器的随机状态

python - 在 Python 中使用 cx_Oracle 和 xlrd 的带有列表列表的 executemany() 返回 TypeError

python - 在 cx_Oracle 上执行许多 CLOB 元素

python - 如何从 Python 脚本中创建存储过程?