Mai*_*ein 3 python sql google-app-engine gql
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")
Run Code Online (Sandbox Code Playgroud)
VS
cursor = Account.query()
Run Code Online (Sandbox Code Playgroud)
因为我喜欢ndb.query,因为我觉得它更具可读性
例:
acc=Account.query(Account.username==form.username.data,Account.password==form.password.data)
如果这两种方法在引擎盖下不同/相等,我找不到任何信息.
=>也许有性能权衡?
如果您习惯使用SQL,请注意使用GQL时的错误假设.GQL被翻译为NDB的本机查询API.这与典型的对象关系映射器(如SQLAlchemy或Django的数据库支持)不同,API调用在传输到数据库服务器之前会被转换为SQL.GQL不支持数据存储修改(插入,删除或更新); 它只支持查询.
我想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))
>>>
Run Code Online (Sandbox Code Playgroud)
(default_options字段仅在GQL中使用OFFSET或LIMIT语法时才相关.)
所以你可以用结果完全一样.您甚至可以使用.filter()和.order()方法将其他过滤器和订单应用于q2.