Jak používat AVG sumu SQLAlchemy dotazu

hlasů
25

Snažím se vrátit souhrnný / průměry řádek z mého datovém souboru, který obsahuje součet některých oblastech a AVG druhých.

Mohl bych to dělat v SQL následujícími způsoby:

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

Můj pokus přeložit do SQLAlchemy je následující:

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

Ale toto je erroring ven s:

TypeError: 'BaseQuery' object is not callable
Položena 22/08/2011 v 05:39
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
41

Měli byste použít něco jako:

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

Nemůžete použít MyObject.querytu, protože SqlAlchemy snaží najít pole dát výsledek avgfunkce k, a to nedokáže.

Odpovězeno 22/08/2011 v 06:03
zdroj uživatelem

hlasů
30

Nemůžete použít MyObject.query tady, protože SqlAlchemy snaží najít pole dát výsledek avg funkce k, a to nedokáže.

To není tak docela pravda. func.avg(Rating.field2).label('average')vrátí Columnobjekt (stejný typ objektu, který se dal být přesný). Takže jej můžete použít s with_entitiesmetodou objektu dotazu.

To je, jak by to pro váš příklad:

Rating.query.with_entities(func.avg(Rating.field2).label('average')).filter(Rating.url == url_string.netloc)
Odpovězeno 02/07/2013 v 21:13
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more