#python #ponyorm
#python #ponyorm
Вопрос:
Я пытаюсь запросить таблицу, используя цепочку операторов OR. На практике я хотел бы выполнить запрос типа:
...
WHERE A.name = ? or A.name = ? or A.name = ? ...
НО возможные значения хранятся в списке, я не знаю, как долго это. Так что я мог бы в конечном итоге написать запрос Pony, подобный этому:
# names is my list, it contains str
select(tag for tag in Tag if any(tag.name == name for name in names))
Это не работает, Пони жалуется, что я пытаюсь выполнить итерацию по чему-то, кроме объекта или запроса (правильно!). Я мог бы попробовать поиграть с методом filter и постепенно создавать запрос, например:
names = ["first", "second", "third"]
query = select(tag for tag in Tag)
for name in names:
query = query.filter(tag for tag in query if tag.name == name)
Но это не работает, так как это приводит к цепочке операторов AND , а не операторов OR , и, похоже, нет способа создавать запросы OR .
В этом упрощенном примере, конечно, я мог бы использовать
in
ключевое слово Python, но это не сработало бы при более сложном запросе, например:
select(tag for tag in Tag if any(tag.name.startswith(name) for name in names))
Есть ли что-то очевидное (или менее очевидное) Я пропустил?
Спасибо!
Комментарии:
1. возможно , метод select_by_sql поможет вам
2. Это могло бы. Но я бы хотел использовать Python всякий раз, когда это возможно. Идея использования ORM для меня заключается в том, чтобы попытаться избежать ужасной работы с SQL, и я знаю, что многие ORM могут это сделать.
3. Не могли бы вы просто сделать
if tag.name in names
?