我有一个Django应用程序,该应用程序从Web API读取数据并将其放入数据库中。
有没有一种方法可以从某个模式创建新对象,但是如果该对象已经存在,则可以防止重复异常?
换句话说,有没有一种方法可以保存对象,但是如果对象已经存在,则什么也不做?
Answers:
IntegrityError
会导致当前事务中止并且这还不够。
transaction.atomic
(确保在块外捕获atomic
,即try: with acomic: create; except IntegrityError
。确保您没有捕获到其他完整性错误也并非易事,这很棘手
IntegrityError
,我的测试表明,与相比,该记录将执行时间缩短了近一半get_or_create()
。
看起来在较新版本的Django中,save()函数默认情况下执行UPDATE或INSERT。看这里。