首页 文章

ReferenceProperty()上的Gql查询

提问于
浏览
0

Short version of my question :基于引用属性的查询过滤的Gql语法是什么?

Long version of my question :假设以下型号:

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 .

但是,我不能像在StringProperty上那样查询.user_id属性的字符串(以下返回一个空列表):

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

我还没有在App Engine文档,App Engine消息板或SO上的其他地方找到答案 .

谢谢!

1 回答

  • 1

    所以 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

相关问题