我在我的python项目中使用TinyDB。但是,为了使逻辑有效,我需要能够在一个查询中获得多个对象。我更喜欢用一个列表
listOfIDs = ['123', '456']我正在使用最新的Python版本和TinyDB实现。
我有以下实施:
from tinydb import TinyDB, Query
db = TinyDB('db.json')
myDBQuery= Query()
db.insert({'id': '123', 'name': 'bob'})
db.insert({'id': '456', 'name': 'mary'})
result = db.search(myDBQuery.id.all(['123', '456']))
print(result)然而,我仍然得到以下结果:
[]我知道我的实现是有效的,因为当我做以下工作时,我会得到预期的结果:
result = db.search((myDBQuery.id == '123') | myDBQuery.id == '456'))有人知道如何在TinyDB中查询列表吗?
有人知道如何在TinyDB中查询列表吗?
编辑
对于那些想知道的人来说,没有办法用当前的实现来做到这一点。我唯一的解决办法是创建如下内容
def getAllObjectsMatchingId(listOfIds):
tempList = []
for idMember in tempList:
result = db.search(myDBQuery.id == idMember)
tempList.append(result)
return tempList发布于 2016-12-26 02:49:12
只有当列表中的所有元素与查询匹配时,.all才返回true
.any也许可以代替
result = db.search(myDBQuery.id.any(['123', '456']))编辑从问题OP:请参阅我的编辑上面
发布于 2020-07-02 03:09:30
发布于 2020-07-22 19:28:17
如果还有人认为这是雷纳尔多实现的另一种选择:
listOfIds = ['1','2','3']
q = Query()
db.search(q.id.one_of(listOfIds))取自查询API
one_of(items: List[Any]) → tinydb.queries.QueryInstance
Check if the value is contained in a list or generator.您还可以否定查询(这正是我所需要的),以获取列表中没有的项:
listOfIds = ['4','5']
q = Query()
db.search(~q.id.one_of(listOfIds))https://stackoverflow.com/questions/41325847
复制相似问题