Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查询非无_Python_Google App Engine - Fatal编程技术网

Python 查询非无

Python 查询非无,python,google-app-engine,Python,Google App Engine,我有一个具有参考属性的模型,例如: class Data(db.Model): x = db.IntegerProperty() class Details(db.Model): data = db.ReferenceProperty(reference_class = Data) 数据引用可以是无 我想获取所有具有有效数据的详细信息实体,即引用属性不是None的实体 以下工作: Details.all().filter('data !=', None).fetch(1000

我有一个具有参考属性的模型,例如:

class Data(db.Model):
    x = db.IntegerProperty()

class Details(db.Model):
    data = db.ReferenceProperty(reference_class = Data)
数据引用可以是无

我想获取所有具有有效数据的详细信息实体,即引用属性不是None的实体

以下工作:

Details.all().filter('data !=', None).fetch(1000)
然而,根据,一个
=查询实际上将执行两个查询,在本例中这似乎是不必要的。是
=优化为在与无查询一起使用时仅执行一个查询

或者,提到NULL总是在有效值之前排序。因此,以下各项似乎也起作用:

Details.all().filter('data >', None).fetch(1000)
虽然这只会执行一个查询,但使用
而不是
=使它正在做的事情的意图不那么明显

作为第三个选项,我可以向模型中添加一个额外字段:

class Details(db.Model):
    data = db.ReferenceProperty(reference_class = Data)
    has_data = db.BooleanProperty()
只要我保持_数据与数据同步,我可以:

Details.all().filter('has_data =', True).fetch(1000)
哪条路最好


谢谢。

我建议您使用“额外型号”字段。这更灵活,因为它还允许您查询没有数据引用的详细信息。此外,查询只能有一个不等式过滤器,因此最好将此不等式过滤器保存到另一个不等式更有意义的属性,例如整数属性

为确保标志始终更新,您可以在详细信息中添加便利功能,如下所示:

class Details(db.Model):
    data = db.ReferenceProperty(reference_class=Data)
    has_data = db.BooleanProperty(default=False)

    def add_data(self, data):
        """ Adds data"""
        if not data: return
        self.has_data = True
        self.data = data
        return self.put()

三重引号,而不是四重引号:)哎呀。谢谢你,蒂姆。Edited.Re“这更灵活,因为它还允许您查询没有数据引用的详细信息”-实际上可以使用
Details.all().filter('Data=',None.).fetch(1000)
来执行此操作。然而,如果我将来需要的话,我还没有考虑将不平等过滤器保存起来做其他事情的角度——这很好。谢谢。更好的是,使用“derivedProperty”在每次卖出时自动更新“has_数据”