输出PostgreSQL查询结果作为Django Response的JSON编码二进制文件

时间:2017-10-18 00:53:18

标签: python json postgresql

我从我的数据库中提取了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中获取二进制编码结果?

0 个答案:

没有答案