在django model中使用uuid作主键,发现在create 数据时出现了主键重读的问题(django.db.utils.IntegrityError: (1062, “Duplicate entry ‘38469ef5922349e4ac856207a82b7c12’ for key ‘PRIMARY’”),当时我就火了,uuid码号称全球唯一 ,我觉得他是在骗我,不过经过一波推敲才发现时我在书写主键出了点小瑕疵,废话不多说,上图
错误示范
uuid_id = models.UUIDField(primary_key=True,default=uuid.uuid4(),editable=False)
正确示范
uuid_id = models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False)
看到区别了吗,就是设置default时,错误的示范中default设置的是一个函数执行,在django编译的时候就已经调用生成好了一个uuid,所以每次都会调用那一个相同的返回值,而正确的做法是default设置为一个函数,每次create数据时就调用一次,当然做到了全球唯一,更不可能出现主键重复的问题。