3

https://developers.google.com/appengine/docs/python/ndb/

https://developers.google.com/appengine/docs/python/ndb/queries

ndb.gql と ndb.query に違いはありますか? (構文のほかに)

例えば

cursor = ndb.gql("select * from Account")

cursor = Account.query()

より読みやすいと思うので、ndb.queryが好きだからです

例: acc=Account.query(Account.username==form.username.data,Account.password==form.password.data)

これらの 2 つの方法が内部で異なる/等しい場合、情報を見つけることができませんでした。

=> パフォーマンスのトレードオフがあるのではないでしょうか?

SQL に慣れている場合は、GQL を使用する際の誤った仮定に注意してください。GQL は NDB のネイティブ クエリ API に変換されます。これは、API 呼び出しがデータベース サーバーに送信される前に SQL に変換される典型的なオブジェクト リレーショナル マッパー (SQLAlchemy や Django のデータベース サポートなど) とは異なります。GQL はデータストアの変更 (挿入、削除、または更新) をサポートしていません。クエリのみをサポートします。

ndb.query は正しく翻訳する必要がないため、「高速」にする必要があると思います。

4

1 に答える 1

8

これらは、同じことを行う 2 つの異なる方法です。特定の状況で、より簡単な方を選択してください。gql() は解析後に Query オブジェクトを構築するため、理論的には遅くなりますが、速度の違いに気付くことはないと思います (実際にクエリを実行すると仮定します:-)。

どちらも同じ型のオブジェクトを返すことに注意してください。

>>> q1 = Employee.query()
>>> q1
Query(kind='Employee')
>>> q2 = gql('SELECT * FROM Employee')
>>> q2
Query(kind='Employee', default_options=QueryOptions(offset=0))
>>> 

(default_options フィールドは、GQL で OFFSET または LIMIT 構文を使用する場合にのみ関連します。)

したがって、結果に対してできることはまったく同じです。.filter() および .order() メソッドを使用して、追加のフィルターと注文を q2 に適用することもできます。

于 2012-07-09T06:43:31.577 に答える