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.

Reply via email to