【问题标题】:How to get SimpleDB Query Count with Boto and SDBManager如何使用 Boto 和 SDBManager 获取 SimpleDB 查询计数
【发布时间】:2012-11-06 09:50:54
【问题描述】:

我想查询我的 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), None, True)

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

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

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

提前致谢!

【问题讨论】:

    标签: count amazon-simpledb boto


    【解决方案1】:

    好吧,我不再偷懒了,只是去源头寻找答案 (来自: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 实际上意味着更多的开销,就我而言,这是不值得的。

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多