在数据存储区中模拟“OR”条件

时间:2010-05-14 08:44:48

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

我正在使用带有Python(Django)的Google App Engine。 如何模仿"SELECT * FROM bla WHERE touser = common.userstats("key") OR fromuser = common.userstats("key") ORDER BY date ASC"

我在考虑这样的事情,但我无法按照我想要的顺序得到它。

    recievedlist = models.P1.all()
    recievedlist.filter("touser =", common.userstats("key"))
    plus1list = recievedlist.fetch(50)

    sendlist = models.P1.all()
    sendlist.filter("fromuser =", common.userstats("key"))
    plus1list += sendlist.fetch(50)

    # order plus1list

1 个答案:

答案 0 :(得分:2)

您可以在模型中添加ListProperty,其中包含touserfromuser。然后,您可以执行单个查询以检索您感兴趣的按日期排序的实体。这消除了数据存储区查询和内存中排序,但会使您在模型上花费额外的索引和更多的存储空间。

(伪)示例:

class bla(db.Model):
    ...
    toandfromuser = db.ListProperty(...)

然后你可以这样做一个查询(因为如果列表toandfromuser的任何元素与你要查找的值匹配,实体将匹配):

SELECT * FROM bla WHERE toandfromuser = common.userstats("key") ORDER BY date ASC