【发布时间】:2018-11-02 04:32:45
【问题描述】:
我正在使用 pandas,并将数据导出为 json,如下所示:
import pandas as pd
df = pd.DataFrame({'a': ['Têst']})
df.to_json(orient='records', lines=True)
> u'{"a":"T\\u00east"}'
这是有道理的,因为我们有一个以 \u 为前缀的 Unicode 字符 00ea,并且在转换为 JSON 时会使用 \ 进行转义
然后我使用 COPY 将 JSON 字符串导入 Postgres
buffer = cStringIO.StringIO()
buffer.write(df.to_json(orient='records', lines=True))
buffer.seek(0)
with connection.cursor() as cursor:
cursor.copy_expert(sql="""
COPY tmp (json_data) FROM STDIN WITH NULL AS '' ENCODING 'UTF8';
""", file=buffer)
问题是数据库中的结果最终是
{"a": "Tu00east"}
如您所见,双重 \\ 消失了。
我尝试使用CSV 作为 COPY 模式,但由于某些数据中有逗号,因此它搞砸了,并且尝试将 ESCAPE 字符和 DELIMITER 设置为其他内容似乎总是会导致失败。
表格列具有jsonb 类型。我在文档中读到 PG 不喜欢 \x003f 上的非 ASCII Unicode,除非 DB 编码是 UTF8,在我的情况下,这应该不是问题。
我试图弄清楚为什么这里要删除转义字符,以及如何导入 Postgres 并保存编码。
【问题讨论】:
标签: python postgresql pandas unicode