是否可以使用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文件中的字段,但不会更新数据库中的字段。