filtragem dinâmica sqlalchemy

Estou tentando implementar a filtragem dinâmica usando o SQLAlchemy ORM.

Eu estava olhando pelo StackOverflow e encontrei uma pergunta muito semelhante:SQLALchemy dynamic filter_by

É útil para mim, mas não o suficiente.

Então, aqui está um exemplo de código, estou tentando escrever:

# 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

então estou tentando reutilizá-lo com algo muito semelhante:

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

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

Após a segunda execução, existem alguns problemas:

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

Quando estou tentando mudar minhafilters para:

filters = {User.name: 'Johny'}

retorna:

TypeError: filter() keywords must be strings

Mas funciona bem para consultas manuais:

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

O que há de errado com meus filtros?

BTW, parece que funciona bem para o caso:

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

Mas seguindo as recomendações do post mencionado, estou tentando usar apenasfilter.

Se é apenas um possível usarfilter_by ao invés defilter, existem diferenças entre esses dois métodos?

questionAnswers(1)

yourAnswerToTheQuestion