Michael Bayer wrote: .. > right there, purchasid 80 is not even in the list of items anymore. > This is basically iterate the list, 80 is there, then flush(), then 80 > is not there. this is all before anything has been "moved". so > either the flush() does something, or just the move of item #79 > affects something with #80. try it without the flush(), and > alternatively try iterating through the list a second time without > moving the items, see if 80 disappears. try without the delete- > orphan too, perhaps thats triggering an event that is problematic. > Tried it with removing the flush() and not using the delete-orphan and still the same behavior.
I then added two more purchase records and now a pattern starts to show, i.e. every second one does not get moved. The slightly updated script (added a print itemB.purchase and removed the flush) and the output: itemA = session.query(db.Cbbottle).get(keyA) itemB = session.query(db.Cbbottle).get(keyB) print 'start to move from B to A' print 'itemA id: %s' % itemA.cbbottleid print 'no purch: %s' % len(itemB.purchase) print itemB.purchase itemB = session.query(db.Cbbottle).get(keyB) for purch in itemB.purchase: print 'purchasid: %s' % purch.purchaseid print 'fk_cbbottleid: %s' % purch.fk_cbbottleid purch.cbbottle = itemA session.commit() itemA = session.query(db.Cbbottle).get(keyA) print 'after move from B to A' print 'itemA id: %s' % itemA.cbbottleid for purch in itemA.purchase: print 'purchasid: %s' % purch.purchaseid print 'fk_cbbottleid: %s' % purch.fk_cbbottleid before move from B to A itemB id: 174 purchasid: 79 fk_cbbottleid: 174 purchasid: 80 fk_cbbottleid: 174 purchasid: 81 fk_cbbottleid: 174 purchasid: 82 fk_cbbottleid: 174 purchasid: 83 fk_cbbottleid: 174 start to move from B to A itemA id: 175 no purch: 5 [Purchase(created=datetime.date(2009, 1, 29), fk_cbbottleid=174, fk_cellarid=None, fk_currencyid=1, fk_supplierid=None, purchased=datetime.datetime(2009, 1, 29, 0, 0), purchaseid=79, purchaseprice=Decimal("0"), purchasepriceforeign=Decimal("0"), purchasevalue=Decimal("0"), quantity=1, remarks=None, transferid=None, updated=datetime.date(2009, 1, 29)), Purchase(created=datetime.date(2009, 1, 29), fk_cbbottleid=174, fk_cellarid=None, fk_currencyid=1, fk_supplierid=None, purchased=datetime.datetime(2009, 1, 29, 0, 0), purchaseid=80, purchaseprice=Decimal("0"), purchasepriceforeign=Decimal("0"), purchasevalue=Decimal("0"), quantity=1, remarks=None, transferid=None, updated=datetime.date(2009, 1, 29)), Purchase(created=datetime.date(2009, 1, 29), fk_cbbottleid=174, fk_cellarid=None, fk_currencyid=1, fk_supplierid=None, purchased=datetime.datetime(2009, 1, 29, 0, 0), purchaseid=81, purchaseprice=Decimal("0"), purchasepriceforeign=Decimal("0"), purchasevalue=Decimal("0"), quantity=5, remarks=None, transferid=None, updated=datetime.date(2009, 1, 29)), Purchase(created=datetime.date(2009, 1, 29), fk_cbbottleid=174, fk_cellarid=None, fk_currencyid=1, fk_supplierid=None, purchased=datetime.datetime(2009, 1, 29, 0, 0), purchaseid=82, purchaseprice=Decimal("0"), purchasepriceforeign=Decimal("0"), purchasevalue=Decimal("0"), quantity=2, remarks=None, transferid=None, updated=datetime.date(2009, 1, 29)), Purchase(created=datetime.date(2009, 1, 29), fk_cbbottleid=174, fk_cellarid=None, fk_currencyid=1, fk_supplierid=None, purchased=datetime.datetime(2009, 1, 29, 0, 0), purchaseid=83, purchaseprice=Decimal("0"), purchasepriceforeign=Decimal("0"), purchasevalue=Decimal("0"), quantity=3, remarks=None, transferid=None, updated=datetime.date(2009, 1, 29))] purchasid: 79 fk_cbbottleid: 174 purchasid: 81 fk_cbbottleid: 174 purchasid: 83 fk_cbbottleid: 174 after move from B to A itemA id: 175 purchasid: 79 fk_cbbottleid: 175 purchasid: 81 fk_cbbottleid: 175 purchasid: 83 fk_cbbottleid: 175 My work around is iterate over the purchase relation and get the primary keys, then do a query on the purchase table and move them. Following script does the trick but it is not quit as nice. keyA = 174 keyB = 175 itemB = session.query(db.Cbbottle).get(keyB) print 'before move from B to A' print 'itemB id: %s' % itemB.cbbottleid allPurch = [] for purch in itemB.purchase: allPurch.append(purch.purchaseid) print 'allPurch: %s' % allPurch itemA = session.query(db.Cbbottle).get(keyA) itemB = session.query(db.Cbbottle).get(keyB) print 'start to move from B to A' print 'itemA id: %s' % itemA.cbbottleid print 'no purch: %s' % len(itemB.purchase) for purchId in allPurch: purch = session.query(db.Purchase).get(purchId) print 'purchasid: %s' % purch.purchaseid print 'fk_cbbottleid: %s' % purch.fk_cbbottleid purch.cbbottle = itemA session.commit() itemA = session.query(db.Cbbottle).get(keyA) print 'after move from B to A' print 'itemA id: %s' % itemA.cbbottleid for purch in itemA.purchase: print 'purchasid: %s' % purch.purchaseid print 'fk_cbbottleid: %s' % purch.fk_cbbottleid Werner --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---