Python 谷歌数据存储ndb.和vs.和

Python 谷歌数据存储ndb.和vs.和,python,google-app-engine,google-cloud-datastore,app-engine-ndb,Python,Google App Engine,Google Cloud Datastore,App Engine Ndb,我发现,使用ndb数据存储API,我可以使用以下内容执行涉及多个属性的查询 Entity.query(Entity.p1 == 1 and Entity.p2 == 2) 或 它们给出了相同的结果,但是第二个需要在属性p1和p2上添加一个额外的索引来执行查询。类似地,如果在查询中使用.filter而不是ndb.AND,则也不需要索引。这些查询数据存储的方法有什么区别?小心;第一个版本('and')的计算结果仅为筛选器的第二部分。试试这个: clause = (Entity.p1 == 1 an

我发现,使用ndb数据存储API,我可以使用以下内容执行涉及多个属性的查询

Entity.query(Entity.p1 == 1 and Entity.p2 == 2)


它们给出了相同的结果,但是第二个需要在属性p1和p2上添加一个额外的索引来执行查询。类似地,如果在查询中使用.filter而不是ndb.AND,则也不需要索引。这些查询数据存储的方法有什么区别?

小心;第一个版本('and')的计算结果仅为筛选器的第二部分。试试这个:

clause = (Entity.p1 == 1 and Entity.p2 == 2)
print clause
=>

在预期的过滤器中执行以下操作:

clause = (Entity.p1 == 1, Entity.p2 == 2)
=>

这与使用ndb的第二个子句类似,并导致ie:

AND(FilterNode('p1', '=', 1), FilterNode('p2', '=', 2))
(在本例中,查询结果相同)


由于单个属性查询不需要额外的索引,您将不会看到为第一个查询版本生成的索引(使用“and”)。

小心;第一个版本('and')的计算结果仅为筛选器的第二部分。试试这个:

clause = (Entity.p1 == 1 and Entity.p2 == 2)
print clause
=>

在预期的过滤器中执行以下操作:

clause = (Entity.p1 == 1, Entity.p2 == 2)
=>

这与使用ndb的第二个子句类似,并导致ie:

AND(FilterNode('p1', '=', 1), FilterNode('p2', '=', 2))
(在本例中,查询结果相同)

由于单个属性查询不需要额外的索引,因此您将不会看到为第一个查询版本生成的索引(使用“and”)