使用python生成唯一json的问题

jr.gcj

经过几次尝试和研究,我一直在尝试如何使用 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章