数据库没有重复的id而且插入的数据也没有重复的id但是使用bulk_create()批量插入数据报错django.db.utils.IntegrityError: UNIQUE constraint

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

使用Student.objects.bulk_create(stu_list)报错django.db.utils.IntegrityError: UNIQUE constraint failed: db_student.id


一、问题描述

数据库没有重复的id而且插入的数据也没有重复的id但是使用bulk_create()批量插入数据报错django.db.utils.IntegrityError: UNIQUE constraint failed: db_student.id

二、解决办法

使用 ignore_conflicts 参数
Student.objects.bulk_create(stu_list, ignore_conflicts=True) 来忽略UNIQUE constraint

### DjangoDBUtils使用方法 #### 一、简介 `django-db-utils` 是一组用于简化和增强 Django 数据库操作的工具[^1]。此包提供了一些实用程序函数和类,使得开发者可以更方便地处理数据库连接和其他常见的数据库交互任务。 #### 二、安装 为了使用 `django-db-utils` ,首先需要将其添加到项目的依赖列表中并完成安装过程。通常可以通过 pip 安装该软件包: ```bash pip install django-db-utils ``` #### 三、配置设置 在 settings.py 文件里加入必要的配置项以便于后续调用 db utils 功能: ```python INSTALLED_APPS = [ ... 'dbutils', ] DATABASES['default']['OPTIONS'] = { "init_command": "SET default_storage_engine=INNODB", } ``` 这里假设默认使用数据库引擎为 INNODB 。可以根据实际需求调整 init_command 参数值。 #### 四、常用功能展示 ##### 1. 获取游标对象 当想要执行自定义SQL语句而不借助 ORM 模型时,可以直接获取一个游标的实例来进行查询或更新操作。 ```python from django.db import connection def get_cursor(): with connection.cursor() as cursor: sql_query = """SELECT * FROM my_table WHERE id=%s""" cursor.execute(sql_query, [some_id]) row = cursor.fetchone() return row ``` 上述代码片段展示了如何利用 context manager 来安全地打开关闭游标资源,并传入参数化查询防止 SQL 注入攻击[^2]。 ##### 2. 批量插入数据 对于大量记录写入场景下,批量提交能显著提高效率减少网络往返次数。 ```python from django_bulk_insert.utils import bulk_create_with_history bulk_create_with_history( model_class=MyModel, objects_list=my_objects, batch_size=1000, ) ``` 注意这里的例子并非来自官方文档而是基于类似概念扩展而来,在真实环境中应当查阅最新版本说明以获得最准确指导。 ##### 3. 自动重试机制 在网络不稳定或者其他原因造成临时错误的情况下自动尝试重新建立连接直到成功为止。 ```python @retry_on_exception(max_retries=5, delay_seconds=2) def perform_db_operation(*args, **kwargs): try: # Your database operation here. pass except Exception as e: raise e from None ``` 这段装饰器模式可以帮助我们优雅地应对偶尔发生的异常状况而无需手动编写复杂的逻辑控制结构[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值