经过几次尝试和研究,我一直在尝试如何使用 cur.itersize 解决错误内存的问题,但仍然遇到问题,因为它没有生成我期望的包含所有行的唯一 json 文件,我得到了什么是不是一个接一个地生成相同的文件,不知道如何做才能使块被附加到一个唯一的 json 文件中。我试图在一个独特的查询中运行它
for row in cur:
并且更改 fetchmany() 和 fetchall() 但是表查询很大并且在 PostgreSQL 中弹出内存不足的错误,我需要整个数据集。
for y in x:
cur = connection.cursor('test')
cur.itersize = 2000
cur.execute(
" SELECT * FROM table "
print("fetching data for " + y)
for row in cur:
rows = cur.fetchmany(2000)
print("Generating json")
rowarray_list = []
print("parsing rows to json file")
json_data = json.dumps(rows)
filename = '%s.json' % y
print('File: ' + filename + ' created')
with open(filename, "w") as f:
f.write(json_data)
您可以采取一些措施来解决内存问题和错误,并提高性能。
fetchall
而不是使用fetchmany
。即“SELECT * FROM table LIMIT 10 OFFSET 0 ”;open
为“a”(追加)而不是“w”(写入);我建议的代码:
limit = 10
for y in x:
print("fetching data for " + y)
filename = '%s.json' % y
page = 0
while 1:
offset = limit * page
with connection.cursor() as cur:
cur.execute("SELECT * FROM table LIMIT %s OFFSET %s", (limit, offset))
rows = cur.fetchall()
if not rows:
break
with open(filename, "a") as f:
f.write(json.dumps(rows))
page += 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句