Gql Query on ReferenceProperty()



我的问题的简短版本:基于引用属性的查询过滤的Gql语法是什么?

问题的长版本:假设以下模型:

Class User(db.Model):
    username = db.StringProperty()
    password = db.StringProperty()
Class Portfolios(db.Model):
    portname = db.StringProperty()
Class Portfolio_Owners(db.Model):
    port_id = db.ReferenceProperty(Portfolios)
    user_id = db.ReferenceProperty(User)
    key_string = db.StringProperty()

我想根据user_id(这是一个ReferenceProperty)查询Portfolio_Owners。

然而,我不能查询。user_id属性的字符串,因为你会在StringProperty(以下返回一个空列表):

key_string = 'aglwb3J0Zm9saW9yCwsSBFVzZXIY6gEM'
que=db.GqlQuery("SELECT * FROM Portfolio_Owners WHERE user_id=:1", key_string)
entity = que.fetch(limit=10)

也不能查询该用户的键对象(下面也返回一个空列表):

key_object = db.Key('aglwb3J0Zm9saW9yCwsSBFVzZXIY6gEM')
que=db.GqlQuery("SELECT * FROM Portfolio_Owners WHERE __key__=:1", key_object)
entity = que.fetch(limit=10)

是的,我确定user_id是正确的…下面是数据存储查看器的复制粘贴:

Entity Kind  Portfolio_Owners
Entity Key   aglwb3J0Zm9saW9yFwsSEFBvcnRmb2xpb19Pd25lcnMYhQIM
ID   261
user_id (Key)   aglwb3J0Zm9saW9yCwsSBFVzZXIY6gEM
User:           id=234
port_id (Key)   aglwb3J0Zm9saW9yEQsSClBvcnRmb2xpb3MYhAIM
Portfolios:     id=260 

我没有在应用引擎文档,应用引擎留言板或其他地方找到答案。

谢谢!

所以aglwb3J0Zm9saW9yCwsSBFVzZXIY6gEM是用户密钥,对吧?让我们从这个开始:

user = db.Key('aglwb3J0Zm9saW9yCwsSBFVzZXIY6gEM')
que = db.GqlQuery("SELECT * FROM Portfolio_Owners WHERE user_id = :1", user)

这将为您提供指向该用户的任何Portfolio_Owners实体。

你可以把它缩短为:

user = db.get('aglwb3J0Zm9saW9yCwsSBFVzZXIY6gEM')
que = user.Portfolio_Owners_set

数据存储从根本上与SQL非常不同。根据您的代码示例,我认为您应该重新访问文档以更好地理解数据存储设计:

http://code.google.com/appengine/docs/python/datastore/entities.html

最新更新