Hi Mike,
Thanks. I learning SQA and I am trying to get the general feeling.
I guess the idea is to use Python directly and Session take care of
the SQL in the background.

mOutOrder = mapper(dbOutOrder, tbl_outHeader, properties={'lines':
relation(dbOutLine, cascade="all, delete-orphan")})
mOutLine = mapper(dbOutLine, tbl_outLine)

        session = Session()
        order = session.query(dbOutOrder).get(2)

        tmp_list = order.lines[:]
        for line in tmp_list:
           order.lines.remove(line)

        for i in range(1,10):
            line = dbOutLine()
            order.lines.append(line)

        i = 0
        tmp_list = order.lines[:]
        for line in tmp_list:
            if i % 2 == 0:
                order.lines.remove(line)
            i += 1

        session.commit()

-- jacek

On Oct 24, 6:27 pm, Michael Bayer <[EMAIL PROTECTED]> wrote:
> On Oct 24, 2008, at 9:08 PM, jack2318 wrote:
>
>
>
>
>
> > I am really sorry but I pressed POST before I was ready. So again the
> > code (without comments)
>
> >       session = Session()
> >        order = session.query(dbOutOrder).get(2)
>
> >        for line in order.lines:
> >           session.delete(line)
> >        session.flush()
>
> >        for i in range(1,10):
> >            line = dbOutLine()
> >            line.HEADER_id = order.id
> >            line.ITEM_SKU_id = 1
> >            line.QTY = 1
>
> >            order.lines.append(line)
>
> >        session.add(order)
> >        session.flush()
>
> >        i = 0
> >        for line in order.lines:
> >            if i % 2 == 0:
> >                print "DELETE"
> >                session.delete(line)
> >            i += 1
> >        session.commit()
>
> > and the mappers:
> > mOutOrder = mapper(dbOutOrder, tbl_outHeader, properties={'lines':
> > relation(dbOutLine)})
> > mOutLine = mapper(dbOutLine, tbl_outLine)
>
> > as soon as I get to commit I get error:
>
> > Unexpected error: <class
> > 'sqlalchemy.orm.exc.ConcurrentModificationError'> Deleted rowcount 5
> > does not match number of objects deleted 7
>
> > What I am doing wrong?  Of course if I issue commit after first delete
> > everything is fine.
>
> session.delete(someobject) does not remove the object from  
> collections.  You're issuing delete() on some of the members of  
> order.lines twice (delete() puts them back into the session after  
> they've been removed).   If you issue a commit(), the order.lines  
> collection is expired so it refreshes the most current data on next  
> access and therefore the problem is eliminated.
>
> Instead of issuing delete() on collection members, just remove them  
> from the collection and use cascade="all, delete-orphan" on the  
> order.lines relation.
>
> also "order" is already in the session; no need to add() it a second  
> time.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to