1

アプリケーションに次のクエリがあります

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] 期待どおり (または期待どおり) に動作しません。ここにユーザーエラーがあると思います。それが何であるか疑問に思います。

4

1 に答える 1

2

プロパティ値によるフィルタリングから(強調鉱山):

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

[...]

単一の式でクエリ フィルタ全体を指定する代わりに、次のように段階的に構築する方が便利な場合があります。

appengine/standard/ndb/queries/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

query3query前の例の変数と同等です。クエリ オブジェクトは不変であるため、 の構築は query2に影響query1を与えず、 の構築はorquery3 に影響を与えないことに注意してください。query1query2

つまり、あなたの例では、どのquery.filter()ステートメントも実際には変更されませんquery

引用された例のように、ステートメントの結果をローカル変数に代入し、代わりにそれらを使用するだけです。

于 2016-11-19T06:19:47.660 に答える