GqlQuery с ключом selfreferenceproperty
У меня есть объект со свойством selfreferency, и я хотел найти условие WHERE на ключе поля selfref. Мое намерение состоит в том, чтобы уменьшить количество обращений к БД путем создания списка ключей, а затем перебора одной и той же сущности для создания вложенного списка. Я использую этот список, чтобы нажать memcache.get_multi() для кэшированной словарной версии наборов результатов, которые я хочу вернуть. Вот сокращенная версия права:
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)
Но я получаю ошибку "BadQueryError: Parse Error: Invalid WHERE Condition".
Я знаю, что могу просто передать всю категорию в:
for categoryKey in accessDict: category = db.ket(db.Key(categoryKey)) q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1',category)
но это похоже на потерянные RPC, если у меня уже есть значение ключа для категории, по которой я хочу фильтровать.
Есть ли способ использовать условие WHERE для ключа referencyproperty?
Спасибо
1 ответ
Ссылочные свойства хранятся в виде ключей, поэтому вы можете сравнить их напрямую:
for categoryKey in accessDict:
q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1', db.Key(categoryKey))