#python #sqlalchemy
#python #sqlalchemy
Вопрос:
- Моя цель: преобразовать необработанный запрос в запрос SQLAlchemy ORM
- необработанный запрос:
Select * from log where log.page != null and (log.page LIKE "%page_1%" or LIKE "%page_2%" or LIKE "%page_3%");
- мой код:
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);
- Ответ с ошибкой:
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 . Для ошибки, пожалуйста, предоставьте полную обратную трассировку.