Web2Py DAL - 如何检查list:string类型项是否为None
我正在尝试查询一个数据集,想要返回所有不为空的列表字符串项。
我的示例表格:
db.define_table('newItems',
Field('name', 'string'),
Field('tasks', 'list:string'))
像这样查询空值:
for item in db(db.newItems.tasks != None).select(db.newItems.tasks):
返回结果:
[]
[]
[u'Wash Dog', u'Mow Yard']
[]
[u'Do X', u'Then do Y']
[]
我该如何构建查询,以便只返回:
[u'Wash Dog', u'Mow Yard']
[u'Do X', u'Then do Y']
谢谢你
更新:
这个答案在sqlite上测试有效,但在mongodb上却不行。空列表 [] 被当作 '' 处理,导致结果不正确:
In [4]: db.Tasks.email != []
Out[4]: <Query {'email': {'$ne': ''}}>
mongo shell:
> db.Tasks.find().count()
1195 (total records)
> db.Tasks.find({'email': {'$ne': ''}}).count()
1195
正确的查询应该是:
> db.Tasks.find({email: {$ne: [ ] }}).count()
108
这是mongo dal的一个bug吗,还是我可以用其他方式来指定空列表?
1 个回答
1
如果你通过 SQLFORM
输入记录,空的 task
值会被存储为空列表,而不是 None
。所以你可以这样做:
db(db.newItems.tasks != []).select(db.newItems.tasks)
需要注意的是,这样做也会排除那些 task
值为 None
的记录(这些记录可能是因为你用 .insert()
插入时没有提供 task
值而存在的)。
更新:看起来由于 MongoDB 适配器的一个错误,上面的做法在 MongoDB 中不适用。