Вопрос

У меня есть юридическое лицо с самообслуживаниемproperty, и я хотел искать с таким ключом поля SelfRef. Мое намерение состоит в том, чтобы уменьшить попадание БД, создавая список ключей, затем итацию по той же сущности для создания вложенного списка. Я использую этот список, чтобы ударить Memcache.get_multi () для кэшированной версии словаря результатов, которые я хочу вернуться. Вот укороченная версия Entitife:

class Link(db.Model):     
    member = db.ReferenceProperty(Member)     
    url = db.TextProperty()   
    title = db.StringProperty()   
    category =db.SelfReferenceProperty()

Я построил ключ «Категория», основанный на другом объекте, который хранит информацию о доступах. Что я хочу сделать, это что-то вроде:

for categoryKey in accessDict:  
    categoryDBKey = db.Key(categoryKey)  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category.key() = :1',categoryDBKey )  

for qItem in q:  
    cacheList.append('Link_' + str(qItem))  
    dataCache = memcache.get_multi(cacheList)

Но я получаю сообщение «BadquaryError: ошибка разбора: недействителен, где условие» ошибка.

Я знаю, что я могу просто передать целую категорию сущности в:

for categoryKey in accessDict:  
    category = db.ket(db.Key(categoryKey))  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1',category)

Но похоже, что впустую RPCS, если у меня уже есть ключевое значение для категории, на которой я хочу фильтровать.

Есть ли способ использовать состояние где на ключ референтности?

Спасибо

Это было полезно?

Решение

Справочные свойства хранятся в виде клавиш, поэтому вы можете сравнить их напрямую:

for categoryKey in accessDict:  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1', db.Key(categoryKey))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top