我想查询我的SimpleDB域,以获得符合特定条件的记录数。可以这样做的事情:
rs=appsDomain.select("select count(*)FROM%s WHERE(%s='%s'或%s='%s')and%s!='%s'"%(APPS_SDBDOMAIN,XML_APPNODE_NAME_ATTR,appName,XML_APPNODE_RERVED_NAME_ATTPR,appName,XML_EMAIL_NODE,thisSession.EMAIL),None,True)
经过阅读,我发现通过SDBManager count方法从SimpleDB获取查询计数可能比直接执行"count(*)"样式的查询更有效。此外,当我知道我只需要一行和一列时,我希望不必在结果集上循环,但我也希望避免这种情况:
count=int(rs.iter().next()['count'])
SDBManager真的更高效吗?有更好的方法吗?如果SDBManager是最好的方式,有人能告诉我如何使用它吗?因为我已经完全失败了?
提前感谢!
好吧,我不再懒惰了,只是去源代码获取答案(发件人:boto-2.6.0-py2.7.egg/boto/sdb/db/manager/sdbmanager.py)
def count(self, cls, filters, quick=True, sort_by=None, select=None):
"""
Get the number of results that would
be returned in this query
"""
query = "select count(*) from `%s` %s" % (self.domain.name, self._build_filter_part(cls, filters, sort_by, select))
count = 0
for row in self.domain.select(query):
count += int(row['Count'])
if quick:
return count
return count
正如您所看到的,sdbmanager.count方法没有什么特别之处,事实上,它做了我希望避免的事情,即在记录存储上循环,只为了获得"count"值。
因此,最后我可能只会自己实现这个方法,因为使用SDBManager实际上意味着更多的过头了,在我的情况下,这是不值得的
谢谢!