社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何通过python/psycopg2的COPY_expert从PostgreSQL复制语法中正确地取消STDOUT

André C. Andersen • 3 年前 • 1632 次点击  

我将postgres表中的jsonb对象作为一个大的 application/jsonl http响应。这非常有效:

def stream_json_from_copy_syntax():
    conn = psycopg2.connect(...)
    cur = conn.cursor()
    file = BytesIO()
    cur.copy_expert(
        sql="COPY (select my_jsonb from large_table) TO STDOUT WITH (FORMAT text)",
        file=file
    )
    file.seek(0)
    for line in file.readlines():
        line = unescape(line)
        yield line

将上述物质推入烧瓶中。这很快,而且内存占用非常小。

jsonb字段最初是正确转义的,但看起来 (FORMAT text) 正在添加一些额外的逃逸。

这就变成了 My \ string 进入propper json "My \\ string" 然后进入 "My \\\\ string" .所以有额外的逃跑。我已经用以下方法处理了这个问题:

def unescape(line):
    return line.replace(b'\\\\', b'\\')

我认为这解决了大多数问题,如果不是全部的话,但我有点不确定是否还有其他问题 (文本格式) 我还没处理好逃跑的事。

我该如何恰当地消除什么 (文本格式) 做或者有没有办法不让它逃逸任何东西,因为最初的json逃逸工作正常。

注意,使用 (ESCAPE 'escape_character') 仅适用于 (FORMAT csv) : https://www.postgresql.org/docs/current/sql-copy.html

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132940
 
1632 次点击  
文章 [ 1 ]  |  最新文章 3 年前