谷歌应用程序引擎python问题

时间:2010-08-19 11:41:44

标签: python google-app-engine

我遇到了数据存储区的问题,试图复制左连接以查找模型a中没有模型b匹配关系的项目:

class Page(db.Model):
    url = db.StringProperty(required=True)

class Item(db.Model):
    page = db.ReferenceProperty(Page, required=True)
    name = db.StringProperty(required=True)

我想找到任何没有相关项目的网页。

3 个答案:

答案 0 :(得分:3)

您无法使用“property is null”过滤器查询项目。但是,您可以向Page添加一个布尔属性,如果它有项目则发出信号:

class Page(db.Model):
    url = db.StringProperty(required=True)
    has_items = db.BooleanProperty(default=False)

然后覆盖Item的“put”方法以翻转标志。但您可能希望将此逻辑封装在Page模型中(可能是Page.add_item(self,* args,** kwargs)):

class Item(db.Model):
    page = db.ReferenceProperty(Page, required=True)
    name = db.StringProperty(required=True)

    def put(self):
        if not self.page.has_items:
            self.page.has_items = True
            self.page.put()
        return db.put(self)

因此,对没有项目的页面的查询将是:

pages_with_no_items = Page.all().filter("has_items =", False)

答案 1 :(得分:1)

数据存储区不支持联接,因此您无法使用单个查询执行此操作。您需要查询A中的项目,然后为每个项目执行另一个查询,以确定它是否在B中有任何匹配的项目。

答案 2 :(得分:-1)

你有没有尝试过:

Page.all().filter("item_set = ", None)

应该工作。