Python代码在创建JSON时花费了很长时间

2024-06-16 14:36:58 发布

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

我使用的是python2.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()

当读取100k记录时,速度非常快,在5秒内完成,但读取1.5 million数据需要15分钟。 我试着给prows = r_cursor.fetcmany(100000)然后它很快就完成了,只有100000个记录,然后就出来了。 您能建议如何读取每次100000记录的数据,并将其循环用于下一个记录吗。我听说generator将以这种方式工作。你能告诉我怎么用发电机吗?你知道吗


Tags: infromimportjsonobjects记录conncursor
1条回答
网友
1楼 · 发布于 2024-06-16 14:36:58

不是答案,但还是写这个吧?你知道吗

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

相关问题 更多 >