I've been looking through the sqlobject source for something like the
python iadd function that would allow incrementing fields using
``UPDATE table set field = field + delta'' to increment the field in an
atomic manner.
class StockFile(SQLObject):
qty_onhand IntegerCol()
qty_committed IntegerCol()
#...
class InvoiceLine(SQLObject):
stockno ForeignKey('Stockfle')
qty_ordered IntegerCol()
qty_shipped IntegerCol()
def _set_qty_ordered(self, value):
delta = value - self.qty_ordered
if delta != 0:
stockrec = Stockfle.get(stockno)
stockrec.qty_commited += delta
....
self._SO_set_custid(value.upper())
In the example above, the ``stockrec.qty_commited += delta'' would generate
the increment update to avoid any possibility of timing issues with
multiple processes updating simultaneously.
Somewhat related question -- if lazyupdates are true, and caching is false,
would updates like the above generate a single UPDATE command?
FWIW: We're primarily using postgresql-7.4.5 and postgresql-8.0.1 with
sqlobject.
Bill
--
INTERNET: bill@... Bill Campbell; Celestial Software LLC
URL: http://www.celestial.com/ PO Box 820; 6641 E. Mercer Way
FAX: (206) 232-9186 Mercer Island, WA 98040-0820; (206) 236-1676
DOS: n., A small annoying boot virus that causes random spontaneous system
crashes, usually just before saving a massive project. Easily cured by
UNIX. See also MS-DOS, IBM-DOS, DR-DOS.
|