使用 python 生成唯一 json 的问题

Problems to generate a unique json using python

经过几次尝试和研究,我一直在尝试如何使用 cur.itersize 解决错误内存问题,但仍然遇到问题,因为它没有生成我期望的唯一 json包含所有行的文件,我得到的是一次又一次生成相同的文件,不知道如何做才能使块附加到一个唯一的 json 文件中。 我试图在没有

的唯一查询中 运行 它
for row in cur:

并更改 fetchmany() 和 fetchall() 但是 table 查询很大,并且在 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)

您可以采取一些措施来解决内存问题和错误,并提高性能。

  • 使用 limit/offset 限制查询结果并使用 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