[storm] Update or add pattern with Storm

Justin Warren daedalus at eigenmagic.com
Mon Nov 3 00:11:02 GMT 2008


On Sun, 2008-11-02 at 08:25 -0800, Jamu Kakar wrote:
> Hi Brad,
> 
> Brad Allen wrote:
> > Is that the only way to get around this? It would be nice if I could 
> > perform a database update without doing any select at all. Sometimes the 
> > id value of the primary key is already available, and I just want to do 
> > an update without selecting first.
> > 
> > In those situations, it would be nice if we could just do something like:
> > 
> > customer = Customer (id=123, first_name = u'Jack', last_name = u'Sparrow')
> > 
> > However, we can't use store.add for this object if we want it to 
> > generate an update statement; Storm usually generates an insert 
> > statement for store.add unless the object was already in the store as a 
> > result of store.find or store.get.
> 
> You can use ResultSet.set to run an update without invoking object
> creation and caching behaviour:
> 
> result = store.find(Customer, Customer.id=123)
> result.set(last_name=u"Sparrow-Hawk")
> 
> If Store.find returns many rows, ResultSet.set will run an UPDATE
> that affects all of them.

Ah woo! That could come in handy if I need to tune performance. Thanks!

There's also a PostgreSQL idiom using savepoints here:
http://www.postgresql.org/docs/8.1/static/sql-update.html

but that's moving away from using Storm as an abstraction layer.

-- 
Justin Warren <daedalus at eigenmagic.com>




More information about the storm mailing list