динамическая фильтрация sqlalchemy

Я пытаюсь реализовать динамическую фильтрацию с использованием SQLAlchemy ORM.

Я просматривал StackOverflow и нашел очень похожий вопрос:SQLALchemy динамический filter_by

Это полезно для меня, но недостаточно.

Итак, вот пример кода, который я пытаюсь написать:

# engine - MySQL engine
session_maker = sessionmaker(bind=engine)
session = session_maker()

# my custom model
model = User

def get_query(session, filters):
    if type(filters) == tuple:
        query = session.query(model).filter(*filters)
    elif type(filters) == dict:
        query = session.query(model).filter(**filters)
    return query

тогда я пытаюсь использовать его с чем-то очень похожим:

filters = (User.name == 'Johny')
get_query(s, filters) # it works just fine

filters = {'name': 'Johny'}
get_query(s, filters)

После второго запуска возникают некоторые проблемы:

TypeError: filter() got an unexpected keyword argument 'name'

Когда я пытаюсь изменить свойfilters чтобы:

filters = {User.name: 'Johny'}

это возвращает:

TypeError: filter() keywords must be strings

Но он отлично работает для ручного запроса:

s.query(User).filter(User.name == 'Johny')

Что не так с моими фильтрами?

Кстати, похоже, что он отлично работает для случая:

filters = {'name':'Johny'}
s.query(User).filter_by(**filters)

Но, следуя рекомендациям из упомянутого поста, я пытаюсь использовать толькоfilter.

Если это только один из возможныхfilter_by вместоfilterЕсть ли различия между этими двумя методами?

Ответы на вопрос(1)

Ваш ответ на вопрос