Реализация запроса на соединение с использованием GQL в google-app-engine - PullRequest
1 голос
/ 23 марта 2011

У меня есть вид сущности, такой как:

prop1 prop2 docid other-properties

str1 p1 1001 .........

str2 p1 1002.........

str2 p2 1001 .........

str1 p2 1003 .........

Я хочу, чтобы все эти docid имели общие "prop1 как str1 и prop2 как p1" и "prop1 как str2 и prop2 как p2" и хотели бы использовать их другие свойства.Как и здесь, ответом будет docid 1001. Может кто-нибудь предложить мне способ сделать это?Я даже готов изменить структуру своей базы данных, если это необходимо, но я хочу, чтобы все это выполнялось одним запросом ...

Хорошо, это хорошо для других свойств. Мне, возможно, не нужно их использовать, я просто хочувсе распространенные docid.

Сейчас я использую что-то вроде этого:

для b в db.GqlQuery ("SELECT * FROM b"):
для a в db.GqlQuery ("ВЫБРАТЬ * ОТ ГДЕ y =: 1", by):
print ax

Но это занимает много времени, так как у меня огромное количество записей.

1 Ответ

1 голос
/ 24 марта 2011

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

class Doc(db.Model):
  strings = db.StringListProperty()

Затем вы можете выполнить запрос для нескольких строк в этом списке следующим образом:

q = Doc.all().filter('strings =', 'str1').filter('strings =', 'str2').get()

Это будет использовать стратегию слияния по умолчанию и, следовательно, не потребует от вас создания каких-либо пользовательских индексов.

...