簡體   English   中英

NDB查詢構建器無法按預期工作

[英]NDB Query builder doesn't work as expected

我的應用程序中有以下查詢

query = cls.query().filter(cls.taskgroup_id == taskgroup_id, cls.availability == True, cls.task_id > min_task_id).order(cls.task_id) query.fetch(1)

以上工作正常。 (僅獲取與taskgroup_id匹配且可用且task_id> min_task_id的那些實體)

但是,當我將查詢分為多個語句時。

query = cls.query()
query.filter(cls.taskgroup_id == taskgroup_id)
query.filter(cls.availability == True)
query.filter(cls.task_id > min_task_id)

它沒有按預期工作。

當我運行[2]時,查詢結構分解為多個語句,它返回一個實體,其可用性為False,而task_id等於min_task_id。

[2]不能按預期(或按我的預期)工作。 我認為這里存在用戶錯誤。 想知道這是什么。

按屬性值過濾 (重點是我):

 query = Account.query(Account.userid >= 40, Account.userid < 50) 

[...]

與在單個表達式中指定整個查詢過濾器相比,您可能會發現更方便地逐步構建它:例如:

AppEngine上/標准/ NDB /查詢/ snippets.py

 query1 = Account.query() # Retrieve all Account entitites query2 = query1.filter(Account.userid >= 40) # Filter on userid >= 40 query3 = query2.filter(Account.userid < 50) # Filter on userid < 50 too 

query3等效於上一個示例中的query變量。 請注意,查詢對象是不可變的 ,因此query2的構造不影響query1 ,而query3的構造也不影響query1query2

換句話說,對於您的示例, query.filter()語句均未真正修改query

只需將語句的結果分配給局部變量,然后使用它們,就像引用的示例一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM