我正在使用python 2.6.6版本并编写代码来创建从下面显示的Oracle表中读取数据的JSON文件。
#!/usr/bin/python
import json
import cx_Oracle
import collections
from collections import OrderedDict
import sys
import os
import logging
from datetime import datetime
connstr = u'username/password@dbname'
conn = cx_Oracle.connect(connstr)
r_cursor = conn.cursor()
r_cursor.execute("sql query")
prows = r_cursor.fetchall()
objects_list = []
for prow in prows:
p = collections.OrderedDict()
p['col1'] = prow[0]
p['col2'] = prow[1]
p['col3'] = prow[2]
p['col4'] = prow[3]
p['col5'] = prow[4]
#This is to filter the null columns
pf = OrderedDict((k, v) for (k, v) in p.iteritems()
if v not in ('None', None))
objects_list.append(pf)
if len(objects_list)>0:
ef['name'] = objects_list
else:
pass
j = json.dumps(ef,indent=2)
objects_file = 'filename.js'
f = open(objects_file,'w')
print >> f,j
conn.close()
f.close()
当读取100 k记录时,它非常快并且在5秒内完成,但是当用1.5 million
读取数据需要15分钟时。
我试着给prows = r_cursor.fetcmany(100000)
然后它只用100000
个记录快速完成并且出来了。
您能否建议每次100000
记录时如何读取数据并将其循环以用于下一条记录。我听说generator
会以这种方式运作。你能建议如何在这里使用发电机吗?
答案 0 :(得分:0)
不是答案,而是如何写这个呢?
prow = [None, 1, 2, 3, 4]
collections.OrderedDict(('col{}'.format(i+1), prow[i]) for i in range(5) if prow[i] not in ("None",None))
返回:
OrderedDict([('col2', 1), ('col3', 2), ('col4', 3), ('col5', 4)])