0

我想在我的 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?

4

2 回答 2

0

确保您没有损害数据库但仍使用 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 即可。

于 2021-01-24T11:41:19.880 回答
0

根据Bob Aman 的回答

坦率地说,在没有恶意行为者的单个应用程序空间中,地球上所有生命的灭绝将在您发生碰撞之前很久就发生,即使在版本 4 UUID 上,即使您每秒生成相当多的 UUID。

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

于 2021-01-24T12:01:55.010 回答