[sqlalchemy] Re: synonyms question
On Jul 7, 2008, at 3:29 PM, Eric Lemoine wrote: Hello To override attribute behavior the 0.5 doc gives this example: class MyAddress(object): def _set_email(self, email): self._email = email def _get_email(self): return self._email email = property(_get_email, _set_email) mapper(MyAddress, addresses_table, properties = { 'email':synonym('_email', map_column=True) }) What won't work if I just set the python property and don't use the synonym func: mapper(MyAddress, addresses_table) What difference does it make? I couldn't find an explanation in the doc. Sorry if that's a dumb question! without synonym(), just add _email:addresses_table.c.email to your mapper properties dict so that the email name is made available. --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups sqlalchemy group. To post to this group, send email to sqlalchemy@googlegroups.com 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 -~--~~~~--~~--~--~---
[sqlalchemy] Re: synonyms question
On Mon, Jul 7, 2008 at 10:24 PM, Michael Bayer [EMAIL PROTECTED] wrote: On Jul 7, 2008, at 3:29 PM, Eric Lemoine wrote: Hello To override attribute behavior the 0.5 doc gives this example: class MyAddress(object): def _set_email(self, email): self._email = email def _get_email(self): return self._email email = property(_get_email, _set_email) mapper(MyAddress, addresses_table, properties = { 'email':synonym('_email', map_column=True) }) What won't work if I just set the python property and don't use the synonym func: mapper(MyAddress, addresses_table) What difference does it make? I couldn't find an explanation in the doc. Sorry if that's a dumb question! without synonym(), just add _email:addresses_table.c.email to your mapper properties dict so that the email name is made available. In that case, on DB read, SA will set _email directly and won't go through _set_email(). Is that correct? And with email:synonym('_email', map_column=True), will SA set _email directly or will it go through _set_email()? My feeling is that it will set it directly, so it is exactly the same as doing _email:addresses_table.c.email. And if one uses neither email:synonym('_email', map_column=True) nor _email:addresses_table.c.email then SA will go through _set_email(). Is my understanding correct? -- Eric --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups sqlalchemy group. To post to this group, send email to sqlalchemy@googlegroups.com 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 -~--~~~~--~~--~--~---
[sqlalchemy] Re: synonyms question
On Jul 7, 2008, at 5:46 PM, Eric Lemoine wrote: without synonym(), just add _email:addresses_table.c.email to your mapper properties dict so that the email name is made available. In that case, on DB read, SA will set _email directly and won't go through _set_email(). Is that correct? yes. And with email:synonym('_email', map_column=True), will SA set _email directly or will it go through _set_email()? My feeling is that it will set it directly, so it is exactly the same as doing _email:addresses_table.c.email. the mapper will always set _email directly. It never goes through user-defined descriptors since it is essentially writing to obj.__dict__ directly. If you want Python code to take effect for data as it leaves the database, you might look into creating a TypeDecorator with the desired behavior. --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups sqlalchemy group. To post to this group, send email to sqlalchemy@googlegroups.com 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 -~--~~~~--~~--~--~---
[sqlalchemy] Re: synonyms question
On Mon, Jul 7, 2008 at 11:51 PM, Michael Bayer [EMAIL PROTECTED] wrote: On Jul 7, 2008, at 5:46 PM, Eric Lemoine wrote: without synonym(), just add _email:addresses_table.c.email to your mapper properties dict so that the email name is made available. In that case, on DB read, SA will set _email directly and won't go through _set_email(). Is that correct? yes. And with email:synonym('_email', map_column=True), will SA set _email directly or will it go through _set_email()? My feeling is that it will set it directly, so it is exactly the same as doing _email:addresses_table.c.email. the mapper will always set _email directly. It never goes through user-defined descriptors since it is essentially writing to obj.__dict__ directly. If you want Python code to take effect for data as it leaves the database, you might look into creating a TypeDecorator with the desired behavior. That explains it all. Thanks Michael. -- Eric --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups sqlalchemy group. To post to this group, send email to sqlalchemy@googlegroups.com 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 -~--~~~~--~~--~--~---