微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 django 中使用 UUID 时如何防止 IntegrityError

如何解决在 django 中使用 UUID 时如何防止 IntegrityError

我想在我的 django 模型中使用 UUID 作为 PK,如下(数据库是 Postgresql):

class Post(models.Model):
    pk = models.UUID(primary_key=True,unique=True,default=uuid.uuid4,editable=False)
    ...

每次 uuid.uuid4 都会生成一个新的 UUID。
我的问题是:uuid.uuid4 是否有可能生成重复的 UUID?
如果可能的话,如何在生成重复的 UUID 的情况下防止 IntegrityError?

解决方法

确保不会危及数据库但仍使用 UUID 作为标识符的最佳方法是执行以下操作:

# Or whatever field name suits you best / unique=True for integrity purposes
uuid_pk = models.UUID(unique=True,default=uuid.uuid4,editable=False)

只需将其设为辅助键且唯一,并照常使用 Django 提供的 pk。

,

根据此answer by Bob Aman

坦率地说,在单个应用程序空间中 没有恶意行为者, 地球上所有生命都将灭绝 早在你有一个 冲突,即使在版本 4 UUID 上, 即使你产生了很多 每秒 UUID。

你真的不需要担心任何重复,如果你仍然担心尝试使用 uuid1 代替,因为它使用机器 MAC 和时间戳,所以出现重复的机会更少。如果需要,您始终可以使用 try-except 块来检查 IntegrityErrors。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。