Encontramos el arreglo a esta cuestión, o por lo menos eso esperamos. Si continuas con dudas puedes escribirlo en el apartado de comentarios y con placer te responderemos
Solución:
Su problema es que filter_by toma argumentos de palabras clave, pero el filtro toma expresiones. Entonces, expandir un dict para filter_by **mydict funcionará. Con el filtro, normalmente le pasa un argumento, que resulta ser una expresión. Entonces, cuando expande su dictado de ** filtros para filtrar, pasa filtrar un montón de argumentos de palabras clave que no entiende.
Si desea crear un conjunto de filtros a partir de un dict de argumentos de filtro almacenados, puede usar la naturaleza generativa de la consulta para seguir aplicando filtros. Por ejemplo:
# assuming a model class, User, with attributes, name_last, name_first
my_filters = 'name_last':'Duncan', 'name_first':'Iain'
query = session.query(User)
for attr,value in my_filters.iteritems():
query = query.filter( getattr(User,attr)==value )
# now we can run the query
results = query.all()
Lo mejor del patrón anterior es que puede usarlo en múltiples columnas unidas, puede construir ‘y’ y ‘or’ con and_ y or_, puede hacer <= o comparaciones de fecha, lo que sea. Es mucho más flexible que usar filter_by con palabras clave. La única advertencia es que para las uniones debe tener un poco de cuidado de no intentar accidentalmente unirse a una tabla dos veces, y es posible que deba especificar la condición de unión para un filtrado complejo. Utilizo esto en un filtrado muy complejo sobre un modelo de dominio bastante complicado y funciona de maravilla, solo mantengo un dictado de entidades unidas para realizar un seguimiento de las uniones.
Tengo un problema similar, traté de filtrar desde un diccionario:
filters = "field": "value"
Equivocado:
...query(MyModel).filter(**filters).all()
Bueno:
...query(MyModel).filter_by(**filters).all()
Al final de la página puedes encontrar las críticas de otros creadores, tú igualmente tienes la opción de mostrar el tuyo si te gusta.