Peewee可以让你使用原子性更新。比如我们需要更新一些计数器。直接的方法是:
>>> for stat in Stat.select().where(Stat.url == request.url):
... stat.counter += 1
... stat.save()
不要这样做!不仅速度很慢,而且容易冲突如果多进程同时在更新这个计数器时。
应该用update方法原子性的更新计数器
>>> query = Stat.update(counter=Stat.counter + 1).where(Stat.url == request.url)
>>> query.execute()
可以尽可能复杂的查询语句。我们将我们雇员的奖金修改为旧奖金加上工资的1成:
>>> query = Employee.update(bonus=(Employee.bonus + (Employee.salary * .1)))
>>> query.execute() # Give everyone a bonus!
我们可以使用子查询去更新某列的值。假如我们有一个存储User模型某个user tweets数量的字段,我们想要阶段性的更新它的值:
>>> subquery = Tweet.select(fn.COUNT(Tweet.id)).where(Tweet.user == User.id)
>>> update = User.update(num_tweets=subquery)
>>> update.execute()
标签:Stat,url,Tweet,update,更新,原子,query
From: https://blog.51cto.com/wusen/6410330