美文网首页
Django 批量覆盖更新

Django 批量覆盖更新

作者: alue | 来源:发表于2023-08-10 22:45 被阅读0次

    利用bulk_create 方法能够批量处理用户上传的数据, 面对大量的上传数据时, 能够提升数据入库的速度.

    这时候, 如果上传的数据存在问题, 该怎么处理呢?

    例如, 数据存在唯一性约束. 但用户上传的数据, 存在重复项.

    这时候,有三种方式.

    • 中断并回滚整个操作
    • 忽略错误项, 继续其它项目的写入
    • 覆盖原先数据.

    前两种比较好实现.

    第三种,如果用的是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 批量覆盖更新

          本文链接:https://www.haomeiwen.com/subject/lpwzpdtx.html