Django - повторная загрузка и обновление CSV-файла в базу данных - PullRequest
0 голосов
/ 06 декабря 2018

Я хотел бы обновить мою Django SQLite3 DB, повторно загрузив измененный CSV-файл.

Вот мой models.py

class CSV_File8(models.Model):
    gebäudebereich = models.CharField(max_length=100)
    gebäudenr = 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 = (("gebäudebereich", "gebäudenr", "ebene", "raum", "dose"), ("switch_ip", "switch_port", "datum", "akteur"))

мой views.py

class UploadFileForm(forms.Form):
    file = forms.FileField()

    def import_csv(request):
    if request.method == "POST":
        with open('C:/Users/admin/Desktop/djangoexcel/b.csv') as file:
            reader = csv.reader(file)
            id = 0
            for row in reader:
                id += 1
                # _, p = CSV_File8.objects.get_or_create(id = id,
                #     gebäudebereich=row[0], gebäudenr=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]
                # )
                ds1 = CSV_File8.objects.filter(id = id,
                    gebäudebereich=row[0], gebäudenr=row[1], ebene=row[2], raum=row[3], dose=row[4]
                ).values().exists()
                ds2 = CSV_File8.objects.filter(id = id,
                    switch_ip=row[5], switch_port=row[6], datum=row[7], akteur=row[8]
                ).values().exists()

                if ds1 and id == id:
                    pass
                if ds2 and id == id:
                    pass
                if ds1 == False and id == id:
                    _, ds1 = CSV_File8.objects.values().update(id = id,
                        gebäudebereich=row[0], gebäudenr=row[1], ebene=row[2], raum=row[3], dose=row[4]
                    )
                if ds2 == False and id == id:
                    _, ds2 = CSV_File8.objects.values().update(id = id,
                        switch_ip=row[5], switch_port=row[6], datum=row[7], akteur=row[8]
                    )
                if ds1 and ds2 == False and id != id:
                    _, ds2 = CSV_File8.objects.values().update(id=id,
                        switch_ip=row[5], switch_port=row[6], datum=row[7], akteur=row[8]
                    )
            return redirect('documents:index')

            # wert = CSV_File3.objects.values_list('dose')
                                # for i in wert:
                                #     if wert[i] == wert[i + 1]:
                                #         #return render(request, 'documents/replace_entry.html', {'p' : p})
                                #         return replace_entry(request, p)
    form = UploadFileForm()
    return render(
        request, "documents/csv_upload.html", {"form": form}
    )

Я получаю сообщение об ошибке UNIQUE constraint failed: documents_csv_file8.id.В этом случае я изменил строку 3 моего CSV-файла, и ds1 является False, что правильно.Теперь он должен просто обновить значение и сохранить его в базе данных.Однако это дает мне ошибку.Я знаю, что это потому, что в этой конкретной строке уже есть уникальное значение, но я подумал, что код выше обрабатывает этот сценарий, просто обновляя значение.Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.Любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...