擅长:python、mysql、java
<p>您应该以同样的方式处理每一个<code>IntegrityError</code>:回滚事务,然后有选择地重试。有些数据库甚至不允许您在一个<code>IntegrityError</code>之后做更多的事情。您还可以在两个冲突事务开始时获取表上的锁,或者在数据库允许的情况下获取更细粒度的锁。</p>
<p>使用<code>with</code>语句显式开始事务,并自动提交(或回滚任何异常):</p>
<pre><code>from schema import Session
from schema.models import Bike
session = Session()
with session.begin():
pk = 123 # primary key
bike = session.query(Bike).filter_by(bike_id=pk).first()
if not bike: # no bike in DB
new_bike = Bike(pk, "shiny", "bike")
session.add(new_bike)
</code></pre>