I planned to do it on the next flush as you said, but since it is not very clean, I manage to do it in the before_flush method.
So, last message on that subject I think: Since 'dirty' var is set before the call of 'before_flush' ( dirty = self._dirty_states ); it doesn't take modification that occurs in there into account. Maybe it should be re-set just after the call, like the new and deleted variables. Thanks a lot for your help! :) Gus On 30 août, 16:47, Michael Bayer <[EMAIL PROTECTED]> wrote: > use before_flush() for changes to the "dirty" list and such....or if > you really want things set up for the *next* flush, use > after_flush_postexec(). > > On Aug 30, 2008, at 10:08 AM, GustaV wrote: > > > > > It almost works. > > A small problem though : when I get and modify instances (a priori not > > loaded before the flush) in after_flush method, they are correctly > > added in the dirty list of the session but the 2nd flush does nothing. > > This is because the identity_map is still flagged as 'not modified' > > > On 29 août, 18:32, Michael Bayer <[EMAIL PROTECTED]> wrote: > >> in r5069, "extension" can be a list of SessionExtension objects. You > >> can also append to session.extensions. > > >> On Aug 29, 2008, at 11:36 AM, GustaV wrote: > > >>> You must be right. > >>> Of course, Turbogears2 already add an extension to the session, > >>> and it > >>> looks like it is not a list of extension anyway (or maybe in the > >>> latest trunk?). > >>> What the best way then? To subclass the tg2 extension with mine and > >>> continue to call overloaded method from mine? Anything better? > > >>> On Aug 29, 3:57 am, Michael Bayer <[EMAIL PROTECTED]> wrote: > >>>> On Aug 28, 2008, at 6:57 PM, GustaV wrote: > > >>>>> Hi all. > >>>>> I'm currently working on a map (like in geography :) ) > > >>>>> When a new tile in inserted in the DB, I'm using an extension > >>>>> mapper > >>>>> to update some neighbor's properties (like the neighbors count). > >>>>> The > >>>>> after_insert method helps a lot... but: > >>>>> When I modify another object than the one being inserted in the > >>>>> after_insert method, the modification happens in the python > >>>>> object, > >>>>> but doesn't occur is the DB. The commit at the end does not seem > >>>>> to > >>>>> have an effect. > > >>>>> What should I do? > > >>>> modifications to objects inside of flush() aren't going to > >>>> propigate > >>>> the same way as when they're outside of the flush(). Within > >>>> MapperExtension you should generally just do things with the > >>>> connection (i.e., issue SQL directly). > > >>>> Otherwise, we have SessionExtension which has a before_flush() > >>>> hook, > >>>> and you can poke around inside the Session and change things freely > >>>> before anything flush()-related occurs. The catch there is that > >>>> you'd > >>>> probably want to be using the latest 0.5 trunk for that (post > >>>> beta3) > >>>> since we've fixed it up a bit to work in a more useful way. I > >>>> find > >>>> that using before_flush() and after_flush() is generally a better > >>>> way > >>>> to go for dependent changes/SQL to be issued since you aren't doing > >>>> things inside of the flush() itself, where its hard to predict when > >>>> things will actually happen. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---