在Python中从Oracle获取大量数据

2024-09-29 02:28:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从python2.6中的Oracle(使用cx_Oracle)获取大量数据,并生成一些csv文件。在

数据大小约为400k记录x200列x100个字符。在

哪种方法最好?在

现在,使用下面的代码。。。在

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

。。。脚本在循环中保持数小时,没有任何内容写入文件。。。(是否有方法为提取的每个记录打印消息?)在

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

谢谢你,吉安


Tags: 文件csv数据方法代码记录connectioncursor
3条回答

我认为您的代码正在向数据库请求一次一行的数据,这可能解释了速度慢的原因。在

尝试:

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

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

Python代码:

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循环中进行处理

^{pr2}$

这正是我在TableHunter for Oracle中所做的。在

  • 每行打印后添加语句
  • 在循环中添加一个计数器,指示每N行之后的进度
  • 查看一个类似“progressbar”的显示进度指示器的模块

相关问题 更多 >