2010-09-15 2 views
4

Может ли кто-нибудь поделиться вашим подходом для выполнения запроса «или» в приложении?Google app engine or query (python)

Пусть говорят, что я

class A_db_model(db.Model): 
valueA = db.ListProperty(basestring) 

в значение а у меня есть

aaa 
aaa, bbb 
bbb 
ccc 

Я хотел бы вернуться результат, если матч значение а «ааа» или «БББ» и возвращать не дублируется результат.

ответ

6

Попробуйте?

A_db_model.all().filter('valueA IN', ['aaa', 'bbb']) 

или эквивалент GQL:

GqlQuery('SELECT * FROM A_db_model WHERE valueA IN :1', ['aaa', 'bbb']) 
+0

благодаря его работе ... – Pete

+4

Обратите внимание, что хранилище данных не может реально сделать такой запрос; этот синтаксис приводит к выполнению 2 запросов и объединению результатов. Использование длинных списков значений для условия IN - это плохая идея. – geoffspear

+0

Да. Фактически, из-за того, как работают свойства списка, вы завершаете сравнение «NxM» в запросах «N». – Amber

2

Две основные проблемы с @ подход Амбер является то, что это очень медленный процесс, как это в основном выполняет запрос для каждого значения за кулисами и исчерпан на 30 значения для запроса. Я только что написал сообщение в блоге об этом вопросе. Это объясняет лучший масштабируемый способ в основном выполнить запрос OR с движком приложения. Вы можете использовать отдельный объект, чтобы это произошло. См. Сообщение для деталей.

http://tornblue.com/post/11310830291/app-engine-how-to-do-an-efficient-or-query