reread your example code, that will actually do the trick. On Wednesday, March 26, 2014 9:07:52 AM UTC-4, Michael Robellard wrote: > > 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> >> 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.