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")
vs
cursor = Account.query()
因为我喜欢ndb.query因为我认为它更具可读性
例如:
acc=Account.query(Account.username==form.username.data,Account.password==form.password.data)
如果这两种方法在引擎盖下不同/相等,我找不到任何信息。
=>也许有性能权衡?
如果您习惯使用SQL,请在使用时注意错误的假设 GQL。 GQL被翻译为NDB的本机查询API。这是不同的 来自典型的Object-Relational映射器(如SQLAlchemy或Django的 数据库支持),其中API调用之前被转换为SQL 它们被传输到数据库服务器。 GQL不支持 数据存储修改(插入,删除或更新);它只是 支持查询。
我想ndb.query应该“更快”,因为它不需要正确翻译?
答案 0 :(得分:8)
这些只是两种不同的方式来做同样的事情。选择在特定情况下更容易的人。你是对的,gql()理论上比较慢,因为它在解析后构建了一个Query对象,但我认为你不会注意到速度上的任何差异(假设你实际运行了查询: - )。 / p>
请注意,两者都返回相同类型的对象:
>>> 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。