表中添加唯一字段报错解决方案

添加唯一字段的迁移

应用向具有现有行的表添加唯一不可为空字段的”普通”迁移将引发错误,因为用于填充现有行的值仅生成一次,从而破坏了唯一约束。

因此,应采取以下步骤。UUIDField在此示例中,我们将添加一个具有默认值的不可为空值。根据您的需要修改相应的字段。

default=uuid.uuid4使用和参数在模型上添加字段unique=True (为要添加的字段类型选择适当的默认值)。

1.运行makemigrations命令。这应该生成带有AddField操作的迁移。

2.运行两次makemigrations myapp –empty,为同一个应用生成两个空的迁移文件 。在下面的示例中,我们已重命名迁移文件以赋予它们有意义的名称。

3.将AddField操作从自动生成的迁移(三个新文件中的第一个)复制到最后一个迁移,更改AddField为 并添加和AlterField的导入。例如:uuidmodels

Generated by Django A.B on YYYY-MM-DD HH:MM
from django.db import migrations, models
import uuid

class Migration(migrations.Migration):

    dependencies = [
        ('myapp', '0005_populate_uuid_values'),
    ]

    operations = [
        migrations.AlterField(
            model_name='mymodel',
            name='uuid',
            field=models.UUIDField(default=uuid.uuid4, unique=True),
        ),
    ]

4.编辑第一个迁移文件。更改unique=True为null=True,这将创建中间空字段并推迟创建唯一约束,直到我们在所有行上填充唯一值。
在文件0004_add_uuid_field.py

class Migration(migrations.Migration):

    dependencies = [
        ('myapp', '0003_auto_20150129_1705'),
    ]

    operations = [
        migrations.AddField(
            model_name='mymodel',
            name='uuid',
            field=models.UUIDField(default=uuid.uuid4, null=True),
        ),
    ]

5.在第一个空的迁移文件中,添加一个 RunPythonor RunSQL操作来为每个现有行生成一个唯一值(示例中为 UUID)。还要添加uuid. 例如在0005_populate_uuid_values.py中

Generated by Django A.B on YYYY-MM-DD HH:MM
from django.db import migrations
import uuid

def gen_uuid(apps, schema_editor):
    MyModel = apps.get_model('myapp', 'MyModel')
    for row in MyModel.objects.all():
        row.uuid = uuid.uuid4()
        row.save(update_fields=['uuid'])

class Migration(migrations.Migration):

    dependencies = [
        ('myapp', '0004_add_uuid_field'),
    ]

    operations = [
        # omit reverse_code=... if you don't want the migration to be reversible.

        migrations.RunPython(gen_uuid, reverse_code=migrations.RunPython.noop),
    ]

最后正常只执行migrate命令就可以对现在的数据表添加唯一字段了

Original: https://www.cnblogs.com/zonghan/p/16729370.html
Author: zong涵
Title: 表中添加唯一字段报错解决方案

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612516/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 数据库的灾备

    数据是企业重要的生产资料,关键数据的丢失可能会给企业致命一击,因为数据是计算机系统存在的原因和基础。数据往往是不可再生的,一旦发生数据丢失,企业就会陷入困境:客户资料、技术文件、财…

    Linux 2023年6月6日
    096
  • CentOS 用户与群组

    Linux 系统中存在一个超级用户 root ,可以做任何操作。Linux 系统中每个用户都有自己独立的账户,有些命令运行需要切换 root 身份,用户是分组的。 1.1、切换用户…

    Linux 2023年6月8日
    078
  • 017 Linux 之啥是 ssh ?

    1 什么是 ssh?有什么用? (1)ssh 是一种协议 (2)ssh 服务 2 ssh 基于密匙的安全验证过程是怎样的? 3 对称加密与非对称加密区别是什么? (1)对称加密 (…

    Linux 2023年5月27日
    0107
  • ThinkPHP5 远程命令执行漏洞

    一、ThinkPHP介绍 轻量级框架,内部OOP和面向过程代码都存在,是国人自己开发的框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,…

    Linux 2023年6月14日
    068
  • Docker安装Portainer

    Docker安装Portainer Docker介绍 Docker是一个开源的容器引擎,完全使用沙箱机制,相互之间不会有任何接口,并且容器性能开销低,让开发者可以打包应用或者依赖包…

    Linux 2023年6月6日
    0109
  • python之pyautogui实现图片识别-办公自动化

    环境 python 3.8everedit编辑器 代码 from selenium import webdriver from selenium.webdriver.chrome….

    Linux 2023年6月7日
    0105
  • 【证券从业】金融基础知识-第三章 证券市场主体01

    注1:后续学习并整理到第八章,全书完结后再合并成一个笔记进行源文件分享 注2:本章内容巨多,大约分为三篇文章记录消化 posted @2022-06-01 22:20 陈景中 阅读…

    Linux 2023年6月13日
    0107
  • FusionAccess桌面云安装(windows AD方法)

    创建FusionAccess虚拟机 选择自定义 默认兼容 选择稍后安装操作系统 选择Linux SUSE Linux 名字位置自己选择 选择最少4个处理器 选择最少8G内存 选择仅…

    Linux 2023年6月8日
    0101
  • Hadoop伪分布式的搭建

    1.准备Linux环境1.1 开启网络,ifconfig指令查看ip 1.2 修改主机名为自己名字(hadoop) 1.3修改主机名和IP的映射关系 1.4关闭防火墙 1.5重启L…

    Linux 2023年5月27日
    065
  • HTTPS 通信过程

    posted @2021-11-26 21:23 HOsystem 阅读(27 ) 评论() 编辑 Original: https://www.cnblogs.com/HOsyst…

    Linux 2023年6月13日
    0142
  • 微信公众号开发之获取微信用户的openID

    (注:openID同一用户同一应用唯一,UnionID同一用户不同应用唯一。不同应用指微信开放平台下的不同用户。) 1、 申请测试号(获得appID、appsecret) 2、 填…

    Linux 2023年6月13日
    074
  • IDEA出现Could not autowire. No beans of ‘xxx’ type found.解决

    Plan A File → Project Structure… Facets → Spring → 右键删除即可 Plan B File → Settings → E…

    Linux 2023年6月13日
    084
  • python爬虫配置随机请求头headers伪装User-Agent

    fake_useragent 库 调用方法 ua.random可以随机返回一个headers(User-Agent) from fake_useragent import User…

    Linux 2023年6月14日
    080
  • How to show or hide views within a layout

    Android programming: mode selection and switching using a single activity, Show or hide vi…

    Linux 2023年6月13日
    067
  • 使用多线程提高REST服务器性能

    异步处理REST服务 1、使用Runnable异步处理Rest服务 释放主线程,启用副线程进行处理,副线程处理完成后直接返回请求 主要代码 import java.util.con…

    Linux 2023年6月7日
    0104
  • Kubernetes 部署Dashboard UI

    实践环境 CentOS-7-x86_64-DVD-1810 Docker 19.03.9 Kubernetes version: v1.20.5 发布 Dashboard 可以通过…

    Linux 2023年5月27日
    0109
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球