1

我想查询我的 SimpleDB 域以获取符合特定条件的记录数。可以这样做:

rs = appsDomain.select("SELECT count(*) FROM %s WHERE (%s='%s' or %s='%s') and %s!='%s'" % (APPS_SDBDOMAIN, XML_APPNODE_NAME_ATTR, appName , XML_APPNODE_RESERVED_NAME_ATTR, appName, XML_EMAIL_NODE, thisSession.email), 无, True)

在做了一些阅读之后,我发现可能通过 SDBManager 计数方法从 SimpleDB 获取查询计数可能比直接执行“count(*)”样式查询更有效。此外,当我知道我只需要一行和一列时,我希望不必遍历结果集,但我也想避免这种情况:

count = int( rs.iter ().next()['Count'])

SDBManager 效率更高是真的吗?有没有更好的办法?如果 SDBManager 是最好的方法,谁能告诉我如何使用它,因为我完全不成功?

提前致谢!

4

1 回答 1

1

好吧,我不再偷懒了,只是去源头寻找答案(FROM: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 方法没有什么特别之处,实际上我希望避免的就是循环记录存储只是为了获取“计数”值。

所以最后我可能会自己实现这个方法,因为使用 SDBManager 实际上意味着更多的开销,就我而言,这是不值得的。

谢谢!

于 2012-11-22T03:43:04.597 回答