我从我的数据库中提取了1M +行数据以发送到HTTP客户端。
PostgreSQL查询返回JSON格式的数据。
我想将JSON直接传递给Response,而不会在其间转换为Python对象,这会占用大量内存:
未压缩的JSON字符串大约为150Mb。在获取数据之前和之后分析内存时,我得到了~1Gb的差异。
如果我作为文字投射,我会看到250Mb以上的更多内容,我可以忍受。
当我使用Postgres to_json
输出数据时,我确实得到了一个JSON对象,但它被psycopg2
解析为一个Python对象,它引用了大量的内存。
如果我将JSON转换为SQL中的字符串(使用to_json(result)::text
我最终得到一个字符串,但"
得到了转义:当它转发给Response对象时,它最终发送一个字符串,并且客户端收到一个字符串,尽管application/json
标题不会被解析为JSON。我想传递JSON,而不必在客户端上解析它(让浏览器执行此操作)
Response类似乎将JSON对象数据解析成二进制文件,用charset编码。这一切都有道理,似乎我需要一个二进制对象而不是一个字符串直接传递给Response。
如何直接从Postgres中获取二进制编码结果?