Django - csv.reader и save () / update - PullRequest
       40

Django - csv.reader и save () / update

0 голосов
/ 24 января 2019

Я пытаюсь обновить поле или несколько полей из моей БД путем повторной загрузки CSV-файла с измененным значением.

Я пробовал это:

views.py

def file_upload(request):
    if request.method == "POST":
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            id = 0
            das2 = CSV3.objects.all().values_list()
            csv_file = request.FILES['file']
            with open(str(csv_file)) as file:       
                reader = csv.reader(file)
                for row in reader:
                    id += 1
                    try:
                        _, p = CSV3.objects.get_or_create(id = id, 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]})

                    except IntegrityError:
                        for i in das2:
                            i[1] = row[0]
                            i.save()


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

Я перебрал значения и установил значение gebaeudebereich в значение gebaeudebereich в CSV-файле (я бы сделал это и с другими полями, но эту идею я попробовал).Это ничего не спасает и не дает ошибки, просто ничего не делает.Предложение try работает просто отлично.

my models.py

class CSV3(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"))

Обновление базы данных с помощью загрузки файла не может быть таким сложным.Я надеюсь, что вы поможете мне, потому что я пытаюсь понять это слишком долго.

1 Ответ

0 голосов
/ 31 января 2019

Я решил с этим решением.

def file_upload(request):
    if request.method == "POST":
        form = UploadFileForm(request.POST, request.FILES)
         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:

                        _, p = Excel1.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]})


                    except IntegrityError:
                        return render(request, 'testapp/duplicate_error.html', {'row' 
: row})

                return redirect('testapp:index')
    form = UploadFileForm()
    return render(
    request, "testapp/file_upload.html", {"form": form}
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...