从字典构建搜索查询?

时间:2019-08-21 00:33:21

标签: python tinydb

说我有字典{k1:v1,k2:v2},如何从中建立查询。 我不能直接做:

.search( (Query().k1 == v1) & (Query().k2 == v2))

因为字典也可能是:

{k2:v2} OR {k1:v1, k3:v3} OR ........

1 个答案:

答案 0 :(得分:1)

在TinyDB实例上的search()函数实际上将谓词作为参数,而Query实例则在幕后创建这些谓词。要运行更高级的搜索,可以为TinyDB提供自己的谓词。

from tinydb import Query,TinyDB

def predicate(obj,requirements):
    for k,v in requirements.items():
        if k not in obj or obj[k]!=v:
            return False
    return True

tiny = TinyDB('db.json')

requirements={
    'a':1,
    'b':3
}

print(tiny.search(lambda obj: predicate(obj,requirements)))