¿Alguien podría explicar la diferencia entre filtery filter_byfunciones en SQLAlchemy? ¿Cuál debería estar usando?
python
sqlalchemy
bodacydo
fuente
fuente

db.users.name=='Ryan'evaluaría una vez a una constante y luego no tendría sentido a partir de entonces? Parece que uno necesitaría usar una lambda para que esto funcione.type(model.column_name == 'asdf')→sqlalchemy.sql.elements.BinaryExpression.filter. una consulta comoid=12345,query(users).filter(id == id)no se filtraráusers.id. En cambio, evaluaráid == idcomoTruey devolverá a todos los usuarios..filter(users.id == id)Debe usar (como se muestra arriba). Cometí este error hoy temprano.En realidad, los fusionamos originalmente, es decir, había un método similar a un "filtro" que aceptaba ,
*argsy**kwargsdonde podía pasar una expresión SQL o argumentos de palabras clave (o ambos). De hecho, me parece mucho más conveniente, pero la gente siempre estaba confundida, ya que generalmente todavía superan la diferencia entrecolumn == expressionykeyword = expression. Entonces los dividimos.fuente
column == expressionvs.keyword = expressiones el punto clave que debe hacerse sobre la diferencia entrefilteryfilter_by. ¡Gracias!filter_bypodría ser un poco más rápido quefilter.filter_byes poder escribir solo el nombre del campo, para esa clase, no se hacen preguntas, aunqueflterrequiere el objeto de columna real, que generalmente requerirá que uno escriba (y lea) al menos un nombre de clase redundante. Entonces, si uno quiere filtrar por igualdad, es bastante conveniente.filter_byutiliza argumentos de palabras clave, mientras quefilterpermite argumentos de filtrado pitónico comofilter(User.name=="john")fuente
Es un azúcar de sintaxis para una escritura de consulta más rápida. Su implementación en pseudocódigo:
Para Y puedes simplemente escribir:
por cierto
Se puede escribir como
También puede obtener objetos directamente por PK a través del
getmétodo:Cuando se usa
getmayúsculas y minúsculas, es importante que el objeto se pueda devolver sin una solicitud de base de datos desde laidentity mapcual se puede usar como caché (asociado con la transacción)fuente
users.filterde la respuesta anterior. Y puede ser mi culpa :) elqueryatributo es query_property y es un azúcar bastante estándar hoy en día