2014-04-21 35 views
0

我使用下面的代碼來計算實體的數目:與GQL查詢相比,爲什麼標準NDB查詢返回不同的結果?

def get_emails_count(email_type=None, yesterday=None, status=None): 
    emails = EmailQueue.query() 
    if email_type: 
     emails = emails.filter(EmailQueue.email_type == email_type) 
    if yesterday: 
     ... 
    if status: 
     emails = emails.filter(EmailQueue.status == status) 
    emails = emails.count(keys_only=True) 
    return emails 

get_emails_count(email_type=4, status=0) 

和以下GQL查詢(在GAE控制檯使用):

SELECT __key__ FROM EmailQueue WHERE email_type=4 and status=0 

第一代碼返回245,第二個返回5實體(看起來更加正確)。第一個代碼有什麼問題?

回答

1

小心使用隱式無對比:

if status: 
    emails = emails.filter(EmailQueue.status == status) 

注意if 0:將評估爲False。相反,你應該寫:

if status is not None: 
    emails = emails.filter(EmailQueue.status == status) 
+0

對,就在一分鐘前通過記錄'str(emails)'發現相同。謝謝! –

相關問題