Web2Py DAL - 如何检查列表:无字符串类型项目
Posted
技术标签:
【中文标题】Web2Py DAL - 如何检查列表:无字符串类型项目【英文标题】:Web2Py DAL - How to check list:string type items for None 【发布时间】:2014-06-15 13:00:20 【问题描述】:我正在尝试查询数据集以返回所有列表:字符串项不为空。 我的示例表:
db.define_table('newItems',
Field('name', 'string'),
Field('tasks', 'list:string'))
对 None 的查询如下:
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 外壳:
> db.Tasks.find().count()
1195 (total records)
> db.Tasks.find('email': '$ne': '').count()
1195
正确的查询应该是:
> db.Tasks.find(email: $ne: [ ] ).count()
108
这是 mongo dal 中的错误还是有其他方法可以指定空列表?
【问题讨论】:
【参考方案1】:如果您通过SQLFORM
输入记录,task
的空值将存储为空列表而不是None
,因此您可以这样做:
db(db.newItems.tasks != []).select(db.newItems.tasks)
注意,这也将排除恰好具有 task
的 None
值的记录(如果您使用 .insert()
而不是 from 插入没有 task
值的记录,则可能存在)。
更新:由于 MongoDB 适配器中的错误,上述内容似乎不适用于 MongoDB。
【讨论】:
感谢您的推荐。使用上面的查询仍然会命中所有空列表。还有其他建议吗? “have”子句是否有助于检查是否为空? 嗯,我尝试的时候不会。您可以考虑在 Google Group 上发布一个显示该问题的应用,以便我们可以准确地查看您的数据库中的值。 适用于 sqlite 但不适用于 mongodb。我更新了详细说明 DAL 生成的 mongo 查询的问题。 抱歉,看起来像是 MongoDB 适配器中的错误。您可以在Google Code 上提交问题。以上是关于Web2Py DAL - 如何检查列表:无字符串类型项目的主要内容,如果未能解决你的问题,请参考以下文章
如何将带有 ROWNUM、LIMIT 的 Web2Py SQL 代码翻译成 DAL?