update remove query one delete datatypes python sqlalchemy flask flask-sqlalchemy

python - remove - Cómo usar avg y sum en la consulta SQLAlchemy



sqlalchemy query (2)

Estoy intentando devolver una fila de totales / promedios de mi conjunto de datos que contiene la SUMA de ciertos campos y la AVG de otros.

Podría hacer esto en SQL a través de:

SELECT SUM(field1) as SumFld, AVG(field2) as AvgFld FROM Rating WHERE url=[url_string]

Mi intento de traducir esto en SQLAlchemy es el siguiente:

totals = Rating.query(func.avg(Rating.field2)).filter(Rating.url==url_string.netloc)

Pero esto es un error de salida con:

TypeError: ''BaseQuery'' object is not callable


No puede usar MyObject.query aquí, porque SqlAlchemy intenta encontrar un campo para poner el resultado de la función avg, y falla.

Esto no es exactamente cierto. func.avg(Rating.field2).label(''average'') devuelve un objeto Column (el mismo tipo de objeto que se le dio para ser preciso). Entonces puede usarlo con el método with_entities del objeto de consulta.

Así es como lo harías por tu ejemplo:

Rating.query.with_entities(func.avg(Rating.field2).label(''average'')).filter(Rating.url == url_string.netloc)


Deberías usar algo como:

from sqlalchemy.sql import func session.query(func.avg(Rating.field2).label(''average'')).filter(Rating.url==url_string.netloc)

No puede usar MyObject.query aquí, porque SqlAlchemy intenta encontrar un campo para poner el resultado de la función avg , y falla.