You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL JSON字段UTF-8字符转义问题:Psycopg2插入解决方案

解决Psycopg2插入JSON时UTF-8字符被转义的问题

方案1:直接传递Python字典(推荐)

从Psycopg2 2.7版本开始,原生支持将Python字典作为JSON类型参数传递,无需使用Json包装器,可直接避免字符转义问题:

cursor.execute("INSERT INTO my_table (json_data) VALUES (%s)", (data,))

这里的data是你要插入的Python字典对象。

方案2:修改Json类的序列化参数

如果必须使用psycopg2.extras.Json类,可通过自定义dumps函数,将ensure_ascii设为False来禁用ASCII转义:

import json
from psycopg2.extras import Json

cursor.execute(
    "INSERT INTO my_table (json_data) VALUES (%s)",
    (Json(data, dumps=lambda x: json.dumps(x, ensure_ascii=False)),)
)

方案3:手动序列化JSON字符串

先将数据序列化为UTF-8编码的JSON字符串(不转义非ASCII字符),再直接插入数据库:

import json

json_str = json.dumps(data, ensure_ascii=False)
cursor.execute("INSERT INTO my_table (json_data) VALUES (%s)", (json_str,))

问题原因

psycopg2.extras.Json默认使用json.dumps且ensure_ascii=True,会把非ASCII字符(比如ö)转义为\u00f6格式;而pgAdmin插入的是原生UTF-8字符串,因此显示正常。上述方案都是通过调整序列化参数,让非ASCII字符以原生形式存储。

内容的提问来源于stack exchange,提问作者Boris Krassi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 12:45:33