Django批量覆盖更新实现示例
作者:alue
这篇文章主要为大家介绍了Django批量覆盖更新实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
批量处理用户上传的数据
利用bulk_create
方法能够批量处理用户上传的数据, 面对大量的上传数据时, 能够提升数据入库的速度.
这时候, 如果上传的数据存在问题, 该怎么处理呢?
例如, 数据存在唯一性约束. 但用户上传的数据, 存在重复项.
这时候,有三种方式.
- 中断并回滚整个操作
- 忽略错误项, 继续其它项目的写入
- 覆盖原先数据.
前两种比较好实现.
psqlextra 插件实现
第三种,如果用的是PostgreSQL的话, 可以考虑用 psqlextra
插件来实现.
例如:
from psqlextra.manager import PostgresManager class Record(models.Model): student = models.ForeignKey(to=Person, on_delete=models.CASCADE, verbose_name='参考人') date = models.DateField(verbose_name='考核时间') class Meta: verbose_name = '考核成绩' verbose_name_plural = verbose_name unique_together = ("student", "date") objects = PostgresManager()
可以用下述方式, 实现批量覆盖更新:
from psqlextra.query import ConflictAction Record.objects.on_conflict( ['student', 'date'], ConflictAction.UPDATE ).bulk_insert( [ dict(student=1,date='2021-02-11'), dict(student=2,date='2021-03-11'), ] )
以上就是Django批量覆盖更新实现示例的详细内容,更多关于Django批量覆盖更新的资料请关注脚本之家其它相关文章!