Pymysql中插入json内容 dict‘ object has no attribute ‘translate‘

最近在使用pymysql插入数据时,会出现以下报错

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'det": 
和
 dict' object has no attribute 'translate'

最后发现是单双引号造成的问题,所以我们应该使用以下方法:

aa = pymysql.escape_string(json.dumps({"a": "b", "c": "d"}))
这个错误信息: ``` 发生错误:dict object has no attribute 'strip' ``` 说明你调用了一个字典(`dict`)对象的 `.strip()` 方法,而字典并没有这个方法。这通常是因为你从数据库中取出的数据不是你预期的格式,比如你可能误将整行查询结果(一个字典)当作某个字段的值来使用了。 --- ### 问题定位分析 你原来的代码中这一行: ```python _, _, _, image_path = result ``` 如果你使用的是 **字典游标(DictCursor)**,那 `result` 是一个字典,而不是元组。所以你不能像元组那样用 `_ , _, _, image_path = result` 来解包。 例如,`result` 可能是这样的: ```python { "药名": "黄芪", "详细信息": "补气固表...", "链接": "[{'name': 'wiki', 'url': '...'}]", "图片路径": None } ``` 你如果试图对 `result` 做解包,`image_path` 就会是字典本身,而不是其中的值,于是你后面调用 `image_path.strip()` 时就出错了。 --- ### ✅ 正确的修复方式 你需要从字典中取值,而不是解包。修改如下: ```python if result: image_path = result["图片路径"] # 从字典中取出字段值 ``` --- ### ✅ 修复后的完整代码段(关键部分) ```python cursor.execute(select_sql, (self.drug_name,)) result = cursor.fetchone() if result: image_path = result["图片路径"] # 正确获取字段值 # 检查图片路径是否存在 if not image_path or str(image_path).strip() == "": # 弹出询问框 reply = QMessageBox.question( self, "路径不存在", f"药名:{self.drug_name} 的图片路径不存在。是否创建文件夹?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No ) ``` --- ### 🔍 建议:检查游标类型 如果你使用的是 `pymysql`,确保你不是使用了 `DictCursor` 却按元组方式访问字段。如果你希望按字段名访问,可以继续使用字典游标;如果你希望按索引访问字段,可以使用默认的游标类型。 如果你想使用元组方式访问字段,确保你没有使用 `cursorclass=pymysql.cursors.DictCursor`。 --- ### ✅ 总结 错误原因:你对一个字典对象调用了 `.strip()`。 解决方式:从字典中取出字段值再进行判断。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值