ndb.gql 与 Model.query 相比 - Google App Engine ndb

问题描述 投票:0回答:1

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)

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

也许存在性能权衡?

如果您习惯使用 SQL,请在使用时谨防错误的假设 GQL。 GQL 被转换为 NDB 的本机查询 API。这是不同的 来自典型的对象关系映射器(如 SQLAlchemy 或 Django 的 数据库支持),其中 API 调用之前被转换为 SQL 它们被传输到数据库服务器。 GQL 不支持 数据存储修改(插入、删除或更新);它只是 支持查询。

我猜

ndb.query
应该“更快”,因为它不需要“翻译成NDB的本机查询API”,对吗?

python sql google-app-engine gql
1个回答
9
投票

这只是做同一件事的两种不同方法。选择在特定情况下对您来说更容易的选项。你是对的,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 应用额外的过滤器和订单。

© www.soinside.com 2019 - 2024. All rights reserved.