我正在抓取文本文档的集合并构建一个 json 对象以使用 python-lifter 进行查询。我目前有这样的数据
[
[
{name:dad},
{name:son, dob:2/24/2000}
],
[
{name:forever_alone, cats:12}
]
]
我想根据 dob
键的存在执行两个不同的查询:1) 获取儿子,2) 获取包含儿子的家庭(爸爸和儿子)。据我了解,lifter 中并没有很好地支持字典列表列表。暂时搁置 lifter 还不允许查询不在每条记录上的字段的问题,什么会更好,对于 lifter 来说更好的结构是什么?
字典的字典列表?
[
{
0:{name:dad},
1:{name:son, dob:2/24/2000}
},
{
0:{name:forever_alone, cats:12}
}
]
或者字典列表的字典?
{18283923:
[
{name:dad},
{name:son, dob:2/24/2000}
],
18283927:
[
{name:forever_alone, cats:12}
]
}
并且,给定理想的嵌套数据结构,将返回 1) 儿子和 2) 包含儿子的家庭的两个查询是什么?
最佳答案
[免责声明:此处为升降机维护者]
lifter 目前不支持此类请求,因为 lifter 会尝试在每个对象上查找查询字段,如果该字段不存在,则会引发错误。
支持querying against iterable fields目前也不好。
An issue不过,关于缺失字段的问题已经被打开, 但无论如何,您的数据结构并不真正适合此类查询。
更好的数据结构是:
families = [
{
'id': 1,
'members': [
{'name': 'dad'},
{'name': 'son', 'dob':'2/24/2000'}
]
},
{
'id': 2,
'members': [
{'name': 'forever_alone', 'cats': 12}
]
}
]
然后,在解决了之前的链接问题后,您可以使用以下内容进行查询:
Family = lifter.models.Model('Family')
manager = Family.load(families)
# get families with son/dob members
son_dob_families = manager.filter(Family.members.name == 'son', Family.members.dob.exists())\
.values(Family.id, Family.members)
# keep only son members with dob
Member = lifter.models.Model('Member')
members = [member for family in son_dob_families for member in family['members']]
sons_with_dob = Member.load(members).filter(Member.name == 'son', Member.dob.exists())
虽然这是一个理论上的 API,但尚未实现。
关于python - 推荐使用 [python-lifter] 进行查询的嵌套数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35633589/