[英]Django - Distinguish different types of IntegrityError
我正在使用django + MySQL。 有时,我将重复数据插入到我的数据库中,这会导致django引发IntegrityErrror
。
问题是,django / python对几个不同的MySQL错误使用同样的错误 。 区分它们的唯一方法是查看错误代码。 例如,
try:
# code that raises integrity error
except IntegrityError
if e.args[0] == 1062:
raise CustomCreatedDuplicateEntryError
else:
raise e
我的问题是:这样做安全吗? 如果是这样,为什么不在较低级别实施? 似乎我不能成为唯一一个想要对IntegrityError进行更细粒度控制的人。
谢谢!
编辑
用于引发此错误的代码
class Foo(django.db.models.Model):
guid = models.CharField(max_length=32, db_index=True, unique=True)
Foo(guid=a).save()
# this raises an IntegrityError with code 1062!
Foo(guid=a).save()
这样做安全吗?
这不是不安全的。 虽然通过这样做,您已经在应用程序和数据库(MySQL)之间创建了一个耦合。 如果您决定用其他数据库解决方案替换MySQL,那该怎么办? 错误代码将被更改,您的代码将引发不一致的消息。
如果是这样,为什么不在较低级别实施?
可能与我有同样的担忧。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.