我的django模型中有以下内容,我正在使用PostgresSql
class Business(models.Model):
location = models.CharField(max_length=200,default="")
name = models.CharField(max_length=200,default="",unique=True)
在我看来,我有:
def saveBusiness(bs):
from ml1.models import Business
for b in bs:
p =Business(**b)
p.save()
return
当应用程序运行并遇到重复的列条目时,我不明白
IntegrityError ...duplicate key value violates unique constraint
我想让ORM根本不插入新记录并移动到下一条记录,如果该字段是重复的而没有崩溃。如何在django中最好地处理?
答案 0 :(得分:0)
最简单的方法是简单地捕捉并忽略IntegrityError
:
for b in bs:
try:
p = Business(**b)
p.save()
except IntegrityError:
pass
但是,如果您正在使用交易,则必须谨慎。请参阅警告here:
发生此类错误后,事务被破坏,Django将在原子块结束时执行回滚。如果您在回滚发生之前尝试运行数据库查询,Django将引发
TransactionManagementError
。
因此,如果您正在使用事务,则需要将每个迭代包装在其自己的atomic()
块中:
for b in bs:
try:
with transaction.atomic():
p = Business(**b)
p.save()
except IntegrityError:
pass