It would be fine/safe that accountA has entry removed BEFORE any
reload (with explicit refresh/expire/commit). I can't remember, but a
previous version of SA had this behavior.

On Apr 6, 4:42 pm, "Michael Bayer" <mike...@zzzcomputing.com> wrote:
> im slightly confused.  the backref should be automatically reparenting,
> not sure if ordering_list interferes with that, but in any case after you
> flush()/expire() or commit(), it will definitely happen since all
> collections will load fresh.
>
> Mike Conley wrote:
> > So, we would like SA to have some kind of operation like "reparent_item()"
> > that would move an object from one relation to another.
> > It seems to me that this is is better handled as a piece of application
> > business logic. In this case, provide a "move_entry()" function that
> > properly encapsulates inserting and removing the entry in a single
> > operation. I can imagine that there would be many variations on business
> > rules for moving an item that would be difficult to encapsulate in a
> > common
> > operation within SA.
>
> > --
> > Mike Conley
>
> > On Mon, Apr 6, 2009 at 2:10 AM, jean-philippe dutreve
> > <jdutr...@gmail.com>wrote:
>
> >> Currently, I use accountA.remove(entry) and I have rewritten insort to
> >> bypass the bug you say.
>
> >> So, AFAIK, whereas an entry has only one account (via
> >> entry.account_id), SA can't remove the first relation.
> >> It's dangerous, because if developer forget to remove the first
> >> relation, the entry is contained in 2 accounts temporaly.
> >> It can lead to false computation (when summing balance for instance).
>
> >> On 5 avr, 22:03, jason kirtland <j...@discorporate.us> wrote:
> >> > jean-philippe dutreve wrote:
> >> > > Hi all,
>
> >> > > I wonder if SA can handle this use case:
>
> >> > > An Account can contain Entries ordered by 'position' attribute.
>
> >> > > mapper(Account, table_accounts, properties = dict(
> >> > >     entries = relation(Entry, lazy=True,
> >> collection_class=ordering_list
> >> > > ('position'),
> >> > >         order_by=[table_entries.c.position],
> >> > >         passive_deletes='all', cascade='save-update',
> >> > >         backref=backref('account', lazy=False),
> >> > >     ),
> >> > > ))
>
> >> > > I'd like to move an entry from accountA to accountB and let SA
> >> remove
> >> > > the link between the entry and accountA:
>
> >> > >     entry = accountA.entries[0]
> >> > >     insort_right(accountB.entries, entry)
> >> > >     assert not entry in accountA.entries    # false, entry is still
> >> in
> >> > > accountA !!!!
>
> >> > > It is possible?
>
> >> > Try removing the entry from accountA:
>
> >> >      entry = accountA.pop(0)
> >> >      ...
>
> >> > Also beware that bisect insort has a bug that prevents it from working
> >> > properly with list subclasses like ordering_list (or any SA list-based
> >> > collection).  I think it's fixed in Python 3.0, not sure if the fix
> >> was
> >> > backported to 2.x.
--~--~---------~--~----~------------~-------~--~----~
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 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to