Django模型新添加uuid字段后为现有数据批量生成uuid

背景:

模型新增uuid字段后如下,如果表中已有数据此时执行迁移默认生成的uuid会是重复的,因为有 unique=True  迁移失败。

1 uuid = models.UUIDField(
2     default=uuid1,
3     unique=True,
4     verbose_name='UUID',
5 )

 

解决办法:

1、先把字段改成,然后执行迁移生成为null的uuid字段

1
2
3
4
5
6
uuid = models.UUIDField(
    default=None,
    null=True,
    unique=True,
    verbose_name='UUID',
)

2、执行SQL批量生成uuid

1
update table_name set uuid = UUID();

注意此时生成的uuid会因为字段长度限制和 '-' 导致uuid被截断,通过UUID检查如下:

1
2
3
4
5
6
>>>UUID('7fdbd19f-f21b-11ec-9afb-3bd1w45f')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "c:\users\***\appdata\local\programs\python\python39\lib\uuid.py", line 177, in __init__
    raise ValueError('badly formed hexadecimal UUID string')
ValueError: badly formed hexadecimal UUID string

3、替换掉中划线

1
update table_name set uuid = REPLACE(uuid, '-', '');

4、补全被截断的部分

通过SQL语句 生成一堆 UUID发现最后一个 中划线后面的部分是固定的,可能是uuid1类型 和mac地址和时间相关的。

然后通过SQL语句补全被截断的后4位

1
update table_name set uuid = CONCAT(uuid, '9adc');
posted @   富贵号  阅读(392)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示