On Aug 2, 2010, at 12:41 PM, Zippy P wrote: > Hi all: > > I have the following code: > > class EventQuery(Query): > def histogram(self): > ''' return a histogram of source / count(source) given an eventquery'' > ... > ... > > class Event(Base): > __tablename__ = 'events' > query = Session.query_property(query_cls = EventQuery) > name = Column(Unicode(128)) > source = Column(BigInteger) > ... > > Now, Event has 54 additional attributes, some of which are quite large. In > EventQuery.histogram(), all I really need is the Event.source attribute. > 'events' has over 150 million rows, and it's likely that > EventQuery.histogram() will be called for all events. > > So - is there any way to 'modify' the query (self) in histogram() so that it > only returns (Event.source, func.count(Event.source)), or, for the general > case, to modify the query to return an attribute of the object? I've tried > from_self, but that seems highly inefficient (at least 20x slower than > Session.query(...) ). I'd also really like to keep histogram() as a method of > EventQuery. > > I can see reasons why this would be impossible, but perhaps there's a way to > do it.
you can use values(Event.source, func.count(...)), or just put a method on Event called "histogram" that uses the standard object_session(self).query(...) approach, I'm not really sure what the using the old "query_property" accessor gets you here > > Thanks, > > S. > > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
