繁体   English   中英

在 Python 中从 Oracle 获取大量数据

[英]Fetching huge data from Oracle in Python

我需要在 python 2.6 中从 Oracle(使用 cx_oracle)获取大量数据,并生成一些 csv 文件。

数据大小约为 400k 记录 x 200 列 x 每列 100 个字符。

哪个是最好的方法?

现在,使用以下代码...

ctemp = connection.cursor()
ctemp.execute(sql)
ctemp.arraysize = 256
for row in ctemp:
  file.write(row[1])
  ...

...脚本在循环中保持数小时,并且没有任何内容写入文件......(有没有办法为提取的每条记录打印一条消息?)

注意:我对 Oracle 没有任何问题,在 SqlDeveloper 中运行查询非常快。

谢谢你,吉安

您应该使用cur.fetchmany()代替。 它将获取由 arraysise (256) 定义的行块

蟒蛇代码:

def chunks(cur): # 256
    global log, d
    while True:
        #log.info('Chunk size %s' %  cur.arraysize, extra=d)
        rows=cur.fetchmany()

        if not rows: break;
        yield rows

然后在 for 循环中进行处理;

for i, chunk  in enumerate(chunks(cur)):
            for row in chunk:
                     #Process you rows here

这正是我在TableHunter for Oracle所做的

  • 在每一行后添加打印语句
  • 在每 N 行后向循环添加一个指示进度的计数器
  • 查看像“进度条”这样的模块来显示进度指示器

我认为您的代码当时正在向数据库询问一行数据,这可能解释了速度缓慢的原因。

尝试:

ctemp = connection.cursor()
ctemp.execute(sql)
Results = ctemp.fetchall()
for row in Results:
    file.write(row[1])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM