On Sunday, April 19, 2015 at 7:08:41 PM UTC-4, Michael Bayer wrote: > > If I want *all* of the "Thing" object, I change it to this: > > q = s.query(Thing, func.count(Comment.type)).\ > > filter(Thing.creation >= datetime.date(2015, 4, 19)).\ > > filter(Thing.creation < datetime.date(2015, 4, 26)).\ > > filter(Comment.target_id == Thing.id).\ > > filter(Comment.creation >= datetime.date(2015, 4, 19)).\ > > filter(Comment.creation < datetime.date(2015, 4, 26)).\ > > filter(Comment.type == 5).\ > > group_by(Thing.id).\ > > order_by(func.count(Comment.type).desc()) > > I get the original problem. Is there a way to accomplish that without > specifying the columns by hand? > > That's a restriction of SQL (unless you are using MySQL with its legacy > settings). The bad way is just to group_by(Thing), which will group by > all of its columns. This is a poor performer and not considered to be very > "correct" in SQL practice. The "better" way is to, as perhaps you were > suggesting originally, use a subquery (though not correlated here); the > form we'd be looking for is explained in terms of SQL in an old article I > still like to link to here: > http://weblogs.sqlteam.com/jeffs/archive/2005/12/14/8546.aspx. I'm > enough of a fan of this form that it is part of the ORM tutorial in this > example: > http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#using-subqueries > , so you'd be looking to emulate the form seen here. > > Ah. I though that s.query(Thing,...) was shorthand for s.query( All the properties in Thing mapped into a Thing object..., but it must be something else.
Thanks! -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.
