On 4/19/15 10:16 AM, ThereMichael wrote:
Ok, that worked perfectly!

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.


--
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.

Reply via email to