【问题标题】:Why standard NDB query returns different result compared to GQL query?与 GQL 查询相比,为什么标准 NDB 查询返回不同的结果?
【发布时间】:2014-06-05 22:40:31
【问题描述】:

我使用以下代码来计算实体的数量:

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 个实体(看起来更正确)。第一个代码有什么问题?

【问题讨论】:

    标签: python google-app-engine app-engine-ndb gql


    【解决方案1】:

    小心使用隐式 None 比较:

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

    请注意,if 0: 将评估为 False。相反,你应该写:

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

    【讨论】:

    • 对,一分钟前通过登录str(emails) 发现了同样的情况。谢谢!
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多