I thought this was working yesterday before svn update, but I can't be
sure.
I have two tables, related like this:
mapper(Shipment, TShipment,
order_by=TShipment.c.id,
properties={
'quote_xml': deferred(TShipment.c.quote_xml),
'quote_pickle': deferred(TShipment.c.quote_pickle),
'raw_manifest': deferred(TShipment.c.raw_manifest),
'decoded_manifest': deferred(TShipment.c.decoded_manifest),
'packages': relation(Package, backref="shipment",
cascade="all, delete-orphan"),
'voided_packages': relation(Package, primaryjoin=\
and_(TShipment.c.id ==
TPackage.c.shipment_id,
TPackage.c.void_confirmed != None
)
),
'nonvoid_packages': relation(Package, primaryjoin=\
and_(TShipment.c.id ==
TPackage.c.shipment_id,
TPackage.c.void_confirmed == None
)
)
})
my code loads a shipment, then does a len(shipment.nonvoid_packages),
and gets the proper number.
Then it decides it needs to void a package, so it sets the package's
void_confirmed date and session.flush()
later, the code does another len(shipment.nonvoid_packages) and the
already voided package is still counted as non-void.
Are custom joins supposed to be re-evaluated when there's a change to
one of the tables in the join?
The first non-void lookup:
select stuff FROM package
WHERE ? = package.shipment_id AND package.void_confirmed IS NULL ORDER
BY package.id
2006-11-16 17:18:14,707 INFO
sqlalchemy.engine.threadlocal.TLEngine.0x..94 [138]
void_confirmed::
2006-11-16 17:18:15,071 INFO
sqlalchemy.engine.threadlocal.TLEngine.0x..94 UPDATE package SET
void_confirmed=? WHERE package.id = ?
INFO:sqlalchemy.engine.threadlocal.TLEngine.0x..94:UPDATE package SET
void_confirmed=? WHERE package.id = ?
2006-11-16 17:18:15,072 INFO
sqlalchemy.engine.threadlocal.TLEngine.0x..94 [datetime.datetime(2006,
11, 16, 17, 18, 15, 67070), 214]
INFO:sqlalchemy.engine.threadlocal.TLEngine.0x..94:[datetime.datetime(2006,
11, 16, 17, 18, 15, 67070), 214]
Later this code runs::
if len(existing_shipment.nonvoid_packages) != 0:
for package in existing_shipment.nonvoid_packages:
print "non-void package tr %r, void date %r" %
(package.trackingnumber, package.void_confirmed)
and the output:
non-void package tr '013514470107311', void date
datetime.datetime(2006, 11, 16, 17, 18, 15, 67070)
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---