[sqlalchemy] Re: How to mark an attribute dirty manually?

2008-09-18 Thread Michael Bayer


On Sep 18, 2008, at 5:46 AM, Adam Dziendziel wrote:


 Hi,

 I have a column which contains XML, this XML is parsed when a record
 is loaded and object attributes are populated with values from this
 XML. When I set an attribute, I would like to mark the XML column
 modified (in property() setter). I wouldn't need to serialize all
 attributes and assign a new value to the XML column explicitly when
 only a single attribute changes. This would generate too much overhead
 when I set many attributes subsequently. I'd like to just make the XML
 column (or the whole record) dirty, so that I'm able to serialize
 attributes to XML only in before_insert/before_update handlers in a
 MapperExtension.

 Is this possible with SQLAlchemy? I'm using 0.4.x.

This description was very hard to parse, but I think what you're  
saying is an attribute changes on a *different* object somewhere,  
which you would like to mark the XML-holding object as dirty.   To  
mark the object dirty you can say instance_state(myobject).modified =  
True , where instance_state is in sqlalchemy.orm.attributes.Theres  
no dirty flag on individual attributes, the change status is  
determined by the contents of the attribute.  So just blanking out the  
XML attribute until needed is a pretty easy approach here too.Yet  
another option which is the most lightweight would be to use a  
SessionExtension with an after_flush() method that issues an UPDATE to  
the XML-holding column directly.

--~--~-~--~~~---~--~~
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: How to mark an attribute dirty manually?

2008-09-18 Thread Adam Dziendziel

 This description was very hard to parse, but I think what you're  
 saying is an attribute changes on a *different* object somewhere,  
 which you would like to mark the XML-holding object as dirty.

Sorry. The same object, but these attributes are pure Python
attributes, they aren't mapped to columns in the database. They are
defined using property() and act as proxies to nodes in XML document.

 To  mark the object dirty you can say instance_state(myobject).modified =  
 True , where instance_state is in sqlalchemy.orm.attributes.    Theres  
 no dirty flag on individual attributes, the change status is  
 determined by the contents of the attribute.  So just blanking out the  
 XML attribute until needed is a pretty easy approach here too.    Yet  
 another option which is the most lightweight would be to use a  
 SessionExtension with an after_flush() method that issues an UPDATE to  
 the XML-holding column directly.

This is what I was looking for. Thank you!

Best regards,
Adam

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