Django-上传多个CSV文件且不覆盖

时间:2019-02-14 10:11:55

标签: python django csv file-upload

是否可以使用update_or_create从不同文件上传多个文件?

现在,我可以将一个csv文件上传到我的sqlite3数据库中。如果更改csv文件,则数据库中的条目将得到更新,而不会出现任何问题。但是现在我正在尝试从另一个csv文件添加条目。使用我目前的方法,因为我只检查ID,所以我将覆盖数据库中的条目。 我试图将另一个文件的条目添加到当前数据库中,而不必将条目复制到初始数据库中。

这是我的模特。py

class CSV5(models.Model):
    gebaeudebereich = models.CharField(max_length=100)
    gebaeudenummer = models.CharField(max_length=100)
    ebene = models.CharField(max_length=100)
    raum = models.CharField(max_length=100)
    dose = models.CharField(max_length=100)
    switch_ip = models.CharField(max_length=100)
    switch_port = models.CharField(max_length=100)
    datum = models.CharField(max_length=100)
    akteur = models.CharField(max_length=100)



    class Meta:
        unique_together = (("gebaeudebereich", "gebaeudenummer", "ebene", "raum", "dose"), ("switch_ip", "switch_port"))

这是我的文件上传功能:

if request.method == "POST":
    form = UploadFileForm(request.POST, request.FILES)
    updated_obj = 0
    created_obj = 0
    duplicate_obj = 0
    count = 0    
    if form.is_valid():
    csv_file = request.FILES['file']

    with open(str(csv_file)) as file:
        reader = csv.reader(file)
        for row in reader:
            count += 1
            try:
                datet = datetime.now().date()
                datum = datet.strftime("%d.%m.%Y")
                row[7] = datum
                row[8] = str(request.user)
                _, p = CSV5.objects.update_or_create(id = count,
                                                     defaults={'gebaeudebereich': row[0],
                                                                   'gebaeudenummer': row[1],
                                                                   'ebene': row[2], 'raum': row[3],
                                                                   'dose': row[4],
                                                                   'switch_ip': row[5],
                                                                   'switch_port': row[6],
                                                                   'datum': row[7], 'akteur': row[8]})

                if p:
                    created_obj += 1
                    print("created: ", created_obj)
                else:
                    updated_obj += 1
                    print("updated: ", updated_obj)
            except IndexError:
                break
            except IntegrityError:
                duplicate_obj += 1
                print("duplicates: ", duplicate_obj)
                count -= 1
                pass

        messages.success(request, "objects created: %s " % created_obj)
        messages.success(request, "objects updated: %s " % updated_obj)
        messages.success(request, "duplicate objects: %s " % duplicate_obj)
        return redirect('appp:index')

form = UploadFileForm()
return render(
    request, "appp/file_upload.html", {"form": form}
)

以下是两个csv文件(已缩短):

a.csv:

25,41,1,23,12,1,A01,07.11.2017,test
25,41,1,22,13,2,A02,07.11.2018,test
25,41,1,23,14,3,A03,07.11.2018,test
25,41,1,23,15,4,A04,07.11.2018,test

b.csv:

19,34,1,23,12,1,A01,07.11.2017,test
19,34,1,22,13,2,A02,07.11.2018,test
19,34,1,23,14,3,A03,07.11.2018,test
19,34,1,23,15,4,A04,07.11.2018,test

因此,目前可以从一个文件上传。当我检查模型字段和ID时,由于我的unique_together约束(我认为),每个字段都收到完整性错误(当我检查没有ID的模型字段时,从其他文件上传的文件有效,但是当我更新任一csv文件中的字段,但不会更新数据库中的字段。

0 个答案:

没有答案