我正在使用熊貓,并將數(shù)據(jù)導(dǎo)出為 json,如下所示:import pandas as pddf = pd.DataFrame({'a': ['Têst']})df.to_json(orient='records', lines=True)> u'{"a":"T\\u00east"}'這是有道理的,因?yàn)槲覀冇幸粋€(gè)00ea前綴為 的 Unicode 字符,\u并且\在轉(zhuǎn)換為 JSON 時(shí)會(huì)轉(zhuǎn)義為但是然后我將 JSON 字符串導(dǎo)入到 Postgres 中 COPYbuffer = 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)問(wèn)題是數(shù)據(jù)庫(kù)中的結(jié)果最終是{"a": "Tu00east"}正如你所看到的那樣,雙人\\消失了。我嘗試使用CSVCOPY 模式,但由于某些數(shù)據(jù)中有逗號(hào),因此將事情搞砸了,并且嘗試將 ESCAPE 字符和 DELIMITER 設(shè)置為其他內(nèi)容似乎總是會(huì)導(dǎo)致失敗。表列有一個(gè)jsonb類(lèi)型。我在文檔中讀到 PG 不喜歡 \x003f 上的非 ASCII Unicode,除非 DB 編碼是 UTF8,在我的情況下,這應(yīng)該不是問(wèn)題。我想弄清楚為什么這里要?jiǎng)h除轉(zhuǎn)義字符,以及如何導(dǎo)入 Postgres 并保存編碼。
1 回答

PIPIONE
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊
將 csv 選項(xiàng)用于COPY, 和DELIMITER e'\x01' QUOTE e'\x02'。我不確定這是否適用于所有可能的有效 JSON,但我從來(lái)沒(méi)有失敗過(guò)。
$ psql -X testdb -c 'create table t(d jsonb)'
CREATE TABLE
$ cat foo.json
{"a":"Têst"}
$ cat foo.json | psql -X testdb -c "COPY t from stdin csv delimiter e'\x01' quote e'\x02'"
COPY 1
$ psql -X testdb -c 'select * from t';
d
---------------
{"a": "Têst"}
(1 row)
添加回答
舉報(bào)
0/150
提交
取消