Gql-запрос на ReferenceProperty () - PullRequest
0 голосов
/ 02 мая 2011

Краткая версия моего вопроса : Каков синтаксис 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()

Я хочу запросить Portfolio_Owners на основе user_id (который является ReferenceProperty).

Однако я не могу запросить строку свойства .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 

Я не нашел ответа в документах App Engine, досках сообщений App Engine или в других местах на SO.

спасибо!

1 Ответ

1 голос
/ 02 мая 2011

Итак, 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

...