Запрос отношения «многие ко многим» в SQLAlchemy - PullRequest
15 голосов
/ 01 июля 2011

У меня довольно стандартное отношение «многие ко многим», похожее на отношение «Блог» -> «Ключевое слово» в руководстве ORM.

Я хотел бы запросить список ключевых слов, возвращая сообщения в блоге, где любое из них соответствует. Тем не менее, я не могу работать, если есть простой способ сделать это. Если я добавлю несколько фильтров, несколько раз делая

.filter(Blog.keywords.any(Keyword.name == 'keyword')) 

тогда я получаю запрос 'AND' / 'EXISTS', так что будут возвращаться только сообщения, которые имеют все эти ключевые слова. Есть ли простой способ сделать это как запрос 'ИЛИ', или мне нужно работать с помощью join ().

Спасибо за любую помощь; Я не могу понять, что я что-то упускаю.

1 Ответ

22 голосов
/ 01 июля 2011

Я думаю, вы просто хотите

.filter(Blog.keywords.any(Keyword.name.in_(['keyword1', 'keyword2', ...])))

Я использую http://www.sqlalchemy.org/docs/05/ormtutorial.html#common-filter-operators для справки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...