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

使用Djongo插入数据遇唯一键冲突,如何将Pymongo错误转为JSON?

问题:如何将Djongo抛出的Pymongo错误转换为JSON格式?

首先还原你遇到的错误场景:

FAILED SQL: INSERT INTO "brand" ("brand_id", "name", "notification_email", "notification_phone", "created_at", "updated_at") VALUES (%(0)s, %(1)s, %(2)s, %(3)s, %(4)s, %(5)s)
Pymongo error: {'index': 0, 'code': 11000, 'errmsg': 'E11000 duplicate key error collection: f2fretaildev.brand index: name_1 dup key: { : "shyamalas" }'}
Version: 1.2.26

这是使用Djongo(Django MongoDB ORM)插入数据时触发的唯一键重复错误。你尝试用json.dumps和json.loads转换错误信息却失败,核心原因是错误里的字典是Python风格的单引号格式,而JSON规范强制要求双引号,直接用JSON模块解析会触发语法错误。

下面提供两种可行的解决方案:

方案1:解析日志中的错误字符串

如果你的错误信息是从日志或字符串中提取的,先用ast.literal_eval解析成Python字典,再转JSON:

import ast
import json

# 提取Pymongo错误的字典部分字符串
pymongo_error_str = "{'index': 0, 'code': 11000, 'errmsg': 'E11000 duplicate key error collection: f2fretaildev.brand index: name_1 dup key: { : \"shyamalas\" }'}"

# 安全解析为Python字典(支持单引号格式)
error_dict = ast.literal_eval(pymongo_error_str)

# 转换为标准JSON格式
error_json = json.dumps(error_dict, indent=2)

print(error_json)

运行后会输出标准JSON:

{
  "index": 0,
  "code": 11000,
  "errmsg": "E11000 duplicate key error collection: f2fretaildev.brand index: name_1 dup key: { : \"shyamalas\" }"
}

方案2:直接捕获Pymongo异常

如果是在代码中直接处理异常,可以访问PymongoDuplicateKeyError的details属性拿到原生字典,再转JSON:

from pymongo.errors import DuplicateKeyError
import json
from djongo import models

# 假设你的Brand模型
class Brand(models.Model):
    brand_id = models.CharField(max_length=50)
    name = models.CharField(max_length=100, unique=True)
    # 其他字段...

try:
    # 插入重复name的记录
    Brand.objects.create(
        brand_id="123",
        name="shyamalas",
        # 其他字段值...
    )
except DuplicateKeyError as e:
    # 获取错误详情字典
    error_details = e.details
    # 转换为JSON
    error_json = json.dumps(error_details, indent=2)
    print(error_json)

这个方案更直接,不需要处理字符串解析,直接从异常对象中获取结构化数据。

内容的提问来源于stack exchange,提问作者Shyamala Gopalakrishnan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:43:12