gpt4 book ai didi

python - ndb.gql 与 ndb.query - Google App Engine

转载 作者:太空宇宙 更新时间:2023-11-03 13:03:33 24 4
gpt4 key购买 nike

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)

如果这两种方法在幕后不同/相同,我找不到任何信息。

=> 也许有性能折衷?

If you are accustomed to SQL, beware of false assumptions when using GQL. GQL is translated to NDB's native query API. This is different from a typical Object-Relational mapper (like SQLAlchemy or Django's database support), where the API calls are translated into SQL before they are transmitted to the database server. GQL does not support Datastore modifications (inserts, deletes or updates); it only supports queries.

我猜 ndb.query 应该“更快”,因为它不需要翻译,对吧?

最佳答案

这只是做同一件事的两种不同方式。选择在特定情况下对您来说更容易的那个。你是对的 gql() 理论上比较慢,因为它在解析后构建了一个 Query 对象,但我认为你不会注意到速度上的任何差异(假设你实际运行查询:-)。

请注意,两者都返回同一类型的对象:

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

(仅当您在 GQL 中使用 OFFSET 或 LIMIT 语法时,default_options 字段才相关。)

所以你可以用结果做什么是完全一样的。您甚至可以使用 .filter() 和 .order() 方法对 q2 应用额外的过滤器和订单。

关于python - ndb.gql 与 ndb.query - Google App Engine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11383216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com