我的过滤器查询有什么问题,以确定一个键是否是列表(db.key)属性的成员?

时间:2013-03-29 19:47:28

标签: google-cloud-datastore

我无法从Google应用引擎数据存储区检索已过滤的列表(使用python进行服务器端)。我的数据实体定义如下

class Course_Table(db.Model):
    course_name = db.StringProperty(required=True, indexed=True)
    ....
    head_tags_1=db.ListProperty(db.Key)

所以head_tags_1属性是一个键列表(它是一个名为Headings_1的不同实体的键)。

我在下面的Handler中旋转我的Course_Table实体来过滤具有特定Headings_1键作为head_tags_1属性成员的课程。但是,当我知道有数据可以满足请求时,它似乎不会检索任何内容,因为当我返回迭代查询结果时,它从不显示下面的日志(如下)。对我做错了什么想法?

def get(self,level_num,h_key):
path = []
if level_num == "1":
    q = Course_Table.all().filter("head_tags_1 =", h_key)

    for each in q:
    logging.info('going through courses with this heading name')
    logging.info("course name filtered is %s ", each.course_name)

很多人感谢

1 个答案:

答案 0 :(得分:1)

我认为h_key是headings_1的关键,因为head_tags_1是一个列表,我相信你需要的是IN运算符。 https://developers.google.com/appengine/docs/python/datastore/queries

注意:你在for循环中的缩进似乎不正确。

我的糟糕显然'='列表已经检查了会员资格。使用=检查成员资格对我有用,你能确定h_key真的是一个数据存储区密钥类吗?

这是我的例子,第一个get产生结果,第二个不是

import webapp2 from google.appengine.ext import db

class Greeting(db.Model):
    author = db.StringProperty()
    x = db.ListProperty(db.Key)

class C(db.Model):  name = db.StringProperty()

class MainPage(webapp2.RequestHandler):
    def get(self):
        ckey = db.Key.from_path('C', 'abc')
        dkey = db.Key.from_path('C', 'def')
        ekey = db.Key.from_path('C', 'ghi')
        Greeting(author='xxx', x=[ckey, dkey]).put()
        x = Greeting.all().filter('x =',ckey).get()
        self.response.write(x and x.author or 'None')
        x = Greeting.all().filter('x =',ekey).get()
        self.response.write(x and x.author or 'None')

app = webapp2.WSGIApplication([('/', MainPage)],
                              debug=True)