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.

Reply via email to