Как использовать операторы flask-SQLAlchemy LIKE и OR в одном запросе?

#python #sqlalchemy

#python #sqlalchemy

Вопрос:

  1. Моя цель: преобразовать необработанный запрос в запрос SQLAlchemy ORM
  2. необработанный запрос:
 Select * from log where log.page != null and (log.page LIKE "%page_1%" or LIKE "%page_2%" or LIKE "%page_3%");
  
  1. мой код:
 from models import Log
selected_page = ["page_1", "page_2", "page_3"...]
like_query = []
for pages in selected_page:
        like_tag = "%{}%".format(pages)
        like_query.append(or_(Log.page.like(like_tag)))
db.session.query(Log).filter(Log.page is not null).filter(*like_query);
  
  1. Ответ с ошибкой:
 sqlalchemy.exc.ArgumentError: SQL expression object expected, got object of type <class 'list'> instead
  

Комментарии:

1. я думаю, вам следует запустить цикл for и заменить like_query на like_query[i], где i — индекс элементов, присутствующих в like_query.

2. Какую СУБД вы используете? log.page LIKE "%page_1%" or LIKE "%page_2%" Действительно ли это допустимо? И делает то, что вы ожидаете? Log.page is not null это определенно не то, что вы ожидаете; is [ not ] это сравнение идентификаторов объектов, которое происходит в Python . Для ошибки, пожалуйста, предоставьте полную обратную трассировку.