TinyDB 获取列表查询中的所有ID
TinyDB get all IDs in list query
我在 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
.all
returns 仅当列表的所有元素都匹配查询时才为真
.any
可能会起作用
result = db.search(myDBQuery.id.any(['123', '456']))
根据问题 OP 编辑:请参阅我上面的编辑
这对我来说似乎是最好的解决方案:
db.search(myDBQuery.id.test(lambda x: x in listOfIDs))
test() Matches any document for which the function returns True
如果有人仍然遇到这个,Reinaldo 实施的替代方案:
listOfIds = ['1','2','3']
q = Query()
db.search(q.id.one_of(listOfIds))
摘自Query's 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))
我在 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
.all
returns 仅当列表的所有元素都匹配查询时才为真
.any
可能会起作用
result = db.search(myDBQuery.id.any(['123', '456']))
根据问题 OP 编辑:请参阅我上面的编辑
这对我来说似乎是最好的解决方案:
db.search(myDBQuery.id.test(lambda x: x in listOfIDs))
test() Matches any document for which the function returns True
如果有人仍然遇到这个,Reinaldo 实施的替代方案:
listOfIds = ['1','2','3']
q = Query()
db.search(q.id.one_of(listOfIds))
摘自Query's 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))