示例模型的值:查询现有模型的列表属性中的AppEngine
class Foo(db.Model):
id = db.IntegerProperty()
bar = db.ListProperty(int, required=True)
我如何查询使用查询或GqlQuery返回具有给定值的所有富实体在他们的吧属性?
如果我有一个ID列表,是否有一个过滤器会返回所有其实体ID属性在该列表中的实体?
示例模型的值:查询现有模型的列表属性中的AppEngine
class Foo(db.Model):
id = db.IntegerProperty()
bar = db.ListProperty(int, required=True)
我如何查询使用查询或GqlQuery返回具有给定值的所有富实体在他们的吧属性?
如果我有一个ID列表,是否有一个过滤器会返回所有其实体ID属性在该列表中的实体?
1.
如果您使用的列表财产等于查询时,它会检查列表中的所有项目:
search = 2
results = Foo.all().filter('bar =', search).fetch()
2.
您可以使用IN过滤器,但请注意,在内部,这会为列表中的每个项目进行数据存储查询,因此速度可能会很慢,并且每个请求最多还有30个内部查询。
items = [1, 2, 3]
results = Foo.all().filter("id IN", items).fetch()
为两个1和2,ListProperty进一步的细节详见Introducing Queries 1.
对于那些你喜欢我谁也无法得到上述答案的工作。
使用GAE版本1.5.3
results = Foo.all().filter('bar =', search).fetch()
没有给出结果。但是
results = Foo.all().filter('bar =', search).fetch(100)
results = Foo.all().filter('bar =', search)
给出结果。
此外,您还可以使用GQL ..这可能是在时间发生的,因为有人问
问题1
wheres = 2
pageSize = 10
qry = db.GqlQuery("SELECT * FROM Foo WHERE bar = :1", wheres)
Foos = qry.fetch(pageSize)
问题2
wheres = [ 1, 3, 44, 101 ]
pagesize = 10
qry = db.GqlQuery("SELECT * FROM Foo WHERE bar IN (:1)", wheres)
Foos = qry.Fetch(pageSize)
发展
注意查询,但。它将实际执行N个子查询(IN子句中的每个元素都有一个)。这里是Gql文档:https://developers.google.com/appengine/docs/python/datastore/gqlreference