首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TinyDB获取列表查询中的所有in

TinyDB获取列表查询中的所有in
EN

Stack Overflow用户
提问于 2016-12-26 02:09:02
回答 3查看 6K关注 0票数 3

我在我的python项目中使用TinyDB。但是,为了使逻辑有效,我需要能够在一个查询中获得多个对象。我更喜欢用一个列表

代码语言:javascript
复制
listOfIDs = ['123', '456']

我正在使用最新的Python版本和TinyDB实现。

我有以下实施:

代码语言:javascript
复制
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)

然而,我仍然得到以下结果:

代码语言:javascript
复制
[]

我知道我的实现是有效的,因为当我做以下工作时,我会得到预期的结果:

代码语言:javascript
复制
result = db.search((myDBQuery.id == '123') | myDBQuery.id == '456'))

有人知道如何在TinyDB中查询列表吗?

有人知道如何在TinyDB中查询列表吗?

编辑

对于那些想知道的人来说,没有办法用当前的实现来做到这一点。我唯一的解决办法是创建如下内容

代码语言:javascript
复制
def getAllObjectsMatchingId(listOfIds):

tempList = []

for idMember in tempList:
    result = db.search(myDBQuery.id == idMember)
    tempList.append(result)

return tempList
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-26 02:49:12

只有当列表中的所有元素与查询匹配时,.all才返回true

.any也许可以代替

代码语言:javascript
复制
result = db.search(myDBQuery.id.any(['123', '456']))

编辑从问题OP:请参阅我的编辑上面

票数 4
EN

Stack Overflow用户

发布于 2020-07-02 03:09:30

对我来说,这似乎是最好的解决办法:

db.search(myDBQuery.id.test(lambda x: x in listOfIDs))

test()匹配函数返回True的任何文档

票数 0
EN

Stack Overflow用户

发布于 2020-07-22 19:28:17

如果还有人认为这是雷纳尔多实现的另一种选择:

代码语言:javascript
复制
listOfIds = ['1','2','3']
q = Query()
db.search(q.id.one_of(listOfIds))

取自查询API

代码语言:javascript
复制
one_of(items: List[Any]) → tinydb.queries.QueryInstance
    Check if the value is contained in a list or generator.

您还可以否定查询(这正是我所需要的),以获取列表中没有的项:

代码语言:javascript
复制
listOfIds = ['4','5']
q = Query()
db.search(~q.id.one_of(listOfIds))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41325847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档