2012-11-18 27 views
1

我想查詢我的SimpleDB域以獲取與特定條件匹配的記錄數。可以這樣做的東西:如何使用Boto和SDBManager獲取SimpleDB查詢計數

rs = appsDomain.select(「SELECT count(*)FROM%s WHERE(%s ='%s'或%s ='%s')和%s!= '%s' 的」%(APPS_SDBDOMAIN,XML_APPNODE_NAME_ATTR,應用程序的名字,XML_APPNODE_RESERVED_NAME_ATTR,應用程序的名字,XML_EMAIL_NODE,thisSession.email),無,真)

做一些閱讀後,我發現,通過SDBManager從SimpleDB的可能得到一個查詢計數count方法可能比直接「count(*)」風格查詢更有效。此外,我希望不要有遍歷一個結果集的時候,我知道只有一個行和列,我需要但我想避免這種過於:

數= INT(RS ITER( ).next()['Count'])

SDBManager更高效嗎?有沒有更好的辦法? 如果SDBManager是最好的方式,任何人都可以告訴我如何使用它,因爲我已經徹底失敗了?

在此先感謝!

回答

1

好了,我不再是懶惰和簡單地去了源得到我的回答 (FROM:博託-2.6.0-py2.7.egg /博託/ SDB/DB /經理/ 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方法沒有什麼特別之處,實際上做什麼,我希望能避免被遍歷一個唱片店只是爲了讓「計數」值(S)。

所以最後我可能會自己實現這個方法,因爲使用SDBManager實際上意味着更多的頭腦,在我的情況下,這是不值得的。

謝謝!