创建JSON文件时,Python代码需要很长时间

时间:2017-08-18 17:55:13

标签: python json

我正在使用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会以这种方式运作。你能建议如何在这里使用发电机吗?

1 个答案:

答案 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)])