如何过滤()不同的项目?

时间:2011-01-28 15:12:08

标签: python google-app-engine filter google-cloud-datastore

这是对我previous question的跟进。

我使用相同型号

class Item(db.Model):
    ...   
    glam = db.StringProperty()
    casual = db.StringProperty()
    speaking = db.StringProperty()

并假设我有2个项目,1个被标记为“glam”,另一个标记为“发言”。

如果我像这样过滤

    query.filter("glam", "glam")
    query.filter("speaking"), "speaking")

过滤器返回none,因为这会查找标记为“glam”和“speak”的1个项目。

如何过滤单独的商品?

更新

Item表可能如下所示:

         glam    speaking
        -------------------
item1
item2    glam
item3            speaking
item4
item5    glam

我想过滤“华丽”和“说话”

1 个答案:

答案 0 :(得分:1)

使用当前架构和当前数据存储API,您无法通过单个查询实现此目的。

如果'glam','casual'和'speak'是互斥的,您可以在单个字段上使用IN查询:

class Item(db.Model):
   ...
   tag = db.StringProperty()

query.filter("tag IN", ["glam", "speaking"])

您还可以使用实验Datastore Plus API并进行OR查询(通过在内部合并两个查询的结果来实现):

# Note: Your model must be a Datastore Plus model; this may require some restructuring!
q1 = query.filter("glam =", "glam")
q2 = query.filter("speaking =", "speaking")
for result in q1.OR(q2):
    ....

请注意,数据存储区加API仍处于开发阶段,因此我不确定这些查询是否并行运行尚未,但它们最终应该是。此外,由于Datastore Plus API仍处于试验阶段且正在开发中,因此您可能必须更改代码以响应API流量。你可以控制何时发生这些更新,至少。