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' ); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」