SQLAlchemy ORM实现计数器字段的原子递增

使用数据库时,经常会遇到计数器字段递增的需求,如果使用MySQL命令很容易做到这一点,如:

UPDATE table SET counter=counter+1 WHERE domain='zhetenga.com';。

在使用 SQLAlchemy ORM 时,更新数据通常使用:

m = Model.query.first()

m.counter = Model.counter + 1

但是这样操作并不是原子操作,并发时是有问题的。

而要使用原子操作也是有办法的,代码如下:

session.query(table).update({table.counter: table.counter + 1})

session.commit()

2015年11月04日