Flask读取YAML构造Mongo查询报unhashable type: 'dict'如何解决
报错原因
- 核心问题出在MongoDB的
find方法第二个参数的写法:你将已经是字典类型的show额外套了一层大括号{},这会被Python识别为创建一个包含show字典的集合。但集合要求所有元素必须是可哈希类型,字典本身不可哈希,直接触发TypeError: unhashable type: 'dict'错误。 - 额外冗余点:你写的
{"$and":[file]}没有必要,file本身就是多条件与逻辑的查询字典,直接作为find的第一个参数即可。
修复方案
直接修改报错行的代码即可:
# 原错误代码 # que1 = db.data.find({"$and":[file]},{show}) # 修复后代码 que1 = db.data.find(file, show)
额外优化建议
- 加载YAML时建议用
yaml.safe_load()替代yaml.load(),避免恶意YAML内容导致的代码执行风险。 - 你当前的代码每次请求都会修改本地的
query.yaml文件,高并发场景下会出现文件读写冲突,如果是多用户使用的场景,建议不要把用户提交的查询条件落地到本地文件,直接在内存中拼接查询条件即可。
内容的提问来源于stack exchange,提问作者unknown_user
相关产品推荐
相关产品推荐

