[sqlalchemy] Re: synonyms question

2008-07-07 Thread Michael Bayer


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

2008-07-07 Thread Eric Lemoine

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

2008-07-07 Thread Michael Bayer


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

2008-07-07 Thread Eric Lemoine

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
-~--~~~~--~~--~--~---