6-4|原子性更新

简介: 6-4|原子性更新

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()
相关文章
|
4月前
|
安全 Java
Volatile不保证原子性及解决方案
**原子性在并发编程中确保操作不可中断,保持数据一致性。volatile保证可见性但不保证原子性,如`count++`在多线程环境下仍可能导致数据不一致。解决方案包括使用`synchronized`、`AtomicInteger`或`ReentrantLock`来确保复合操作的原子性和线程安全。例子展示了volatile在并发自增中的局限性,实际值通常小于预期,强调了正确选择同步机制的重要性。**
|
6月前
|
Java 数据库
数据原子性
数据原子性
278 3
|
XML Java 数据格式
五、事务操作2
五、事务操作2
66 0
|
6月前
|
Java
8.volatile为啥不能保证原子性?
8.volatile为啥不能保证原子性?
59 0
8.volatile为啥不能保证原子性?
|
6月前
|
Java
18.AtomicReference、AtomicStampReference底层原理。多个变量更新怎么保证原子性?CAS的ABA问题怎么解决?
18.AtomicReference、AtomicStampReference底层原理。多个变量更新怎么保证原子性?CAS的ABA问题怎么解决?
58 0
18.AtomicReference、AtomicStampReference底层原理。多个变量更新怎么保证原子性?CAS的ABA问题怎么解决?
|
6月前
|
关系型数据库 MySQL 数据库
事务和锁:保证数据一致性
事务和锁:保证数据一致性
72 0
|
XML Java API
五、事务操作1
五、事务操作1
91 0
五、事务操作1
|
关系型数据库 MySQL 数据库
并发事务更新问题
并发事务更新问题
60 0
|
Oracle 关系型数据库 MySQL
mysql数据库事务脏读、不可重复度、幻读详解
mysql数据库事务脏读、不可重复度、幻读详解
137 0