如何在TinyDB中查询特定Key?查询返回空结果求解决
解决TinyDB根据嵌套Key查询值的问题
你的问题出在数据库结构和查询方式不匹配:当前数据库里,每个文档的顶级键是"1",目标pid是文档内嵌套对象的键,而你用的Query()[str(pid)]是在查找顶级字段名等于pid字符串的文档,自然找不到结果。
给你两种解决方案:
方案一:适配现有数据库结构查询
遍历所有文档,检查每个文档内的嵌套对象是否包含目标pid:
from tinydb import TinyDB db = TinyDB('db.json') pid = 1082685467876675736 pid_str = str(pid) # 遍历所有文档查找匹配项 target_url = None for doc in db.all(): # 遍历文档内的每个键值对(这里只有"1"对应的对象) for nested_obj in doc.values(): if isinstance(nested_obj, dict) and pid_str in nested_obj: target_url = nested_obj[pid_str] break if target_url: break print(target_url if target_url else "未找到对应URL")
方案二:优化数据库结构(推荐)
如果可以修改数据库格式,把pid和url设为文档的直接字段,查询会更高效:
调整后的db.json结构:
{"_default": { "1": { "pid": "1082685467876675736", "url": "https://stackoverflow.com/" } }}
对应的查询代码:
from tinydb import TinyDB, Query db = TinyDB('db.json') pid = 1082685467876675736 q = Query() result = db.get(q.pid == str(pid)) print(result['url'] if result else "未找到对应URL")
内容的提问来源于stack exchange,提问作者mxxim
相关产品推荐
相关产品推荐

