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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---