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?