Вот начало одного:
Я собираюсь переписать ваше выражение в терминах префиксной нотации;оператор является первым, а другие значения следуют, так:
test_expression = ['|',('=','name','root'), ('=','role','admin')]
, но, возможно, вы могли бы добавить еще несколько специфических для оператора проверок для обработки операторов в других местах.используйте его, передайте сопоставленный класс, с которым вы хотите использовать запрос:
session.query(User).filter(build_query(User, test_expression))