0

我在从谷歌应用引擎数据存储中检索过滤列表时遇到问题(使用 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 的实体的键)。

我在下面的处理程序中旋转我的 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)

非常感谢你

4

1 回答 1

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)
于 2013-03-30T17:17:59.743 回答