I want it mapped to an object because I want to have some properties/methods that can be executed on each row of the results that will do some additional logic.
On Tuesday, March 25, 2014 6:21:31 PM UTC-4, Michael Bayer wrote: > > > On Mar 25, 2014, at 2:43 PM, Michael Robellard > <mi...@robellard.com<javascript:>> > wrote: > > > Hello, I have what seems like a simple problem, but the only solution I > have come up with so far isn't very good. I have a large complex query that > is hand optimized that is built from aggregates and other data from > different mapped tables. I can create a query for it by doing > Session.query([column names]).from_statement(query).params({}) and that > works just fine, but rather than each row being a KeyedTuple, I would like > each row to be mapped to an object of a class, so that I can create some > properties and methods on the object > > > > When I tried > http://docs.sqlalchemy.org/en/rel_0_9/orm/mapper_config.html#mapping-a-class-against-arbitrary-selectsI > get an error about not having a primary key defined > > > > I did get this to kind of work with Bundles, but it looks ugly and you > have to dereference the bundle > > > > Here's a gist of the code: > https://gist.github.com/subssn21/0f7300203aa39536ff5d > > > > What's the right way to handle this? > > the query you have there is entirely fixed. You can map to this if you > wanted (using mapper() with text()) but as this is read only and has no > malleability at all, you might as well just map a dictionary to it: > > class ShiftPunchData(object): > def some_method(self): > pass > > @classmethod > def load_data(cls, session): > for row in session.execute(“ your big query goes here”): > s = ShiftPunchData() > s.__dict__.update(row) > yield s > > you’d get the same effect. of course theres no relationships or eager > loading or anything like that but you’re working with an enormous fixed > query so none of that applies anyway. > > now if OTOH you want to build a flexible mapping based on that general > query idea, you’d want to express most or all of it in terms of a SQL > expression, either a core expression or ORM. It depends on what you want > to be able to do with it. > > > > -- 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 sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.