![](/img/trans.png)
[英]Django check if value exists in the database and create and save if not
[英]Django - Check if a variable set exists in the Database and process it if it does?
所以我有一个Django应用,可以在其中上传CSV文件。 我的CSV文件有9列,可以分为两个“数据集”,其中前5列需要作为一个信息处理,而其他4列需要作为另一种信息处理。 我不能将前5个放在一个单元格中,而将其他5个放在另一个单元格中。 我想检查第一个数据集是否存在,如果存在,请对其进行处理。 其他数据集也是如此。 并且如果两个数据集都不存在,则应使用get_or_create更新数据库。
这是我的views.py
想法
def import_csv(request):
if request.method == "POST":
with open('C:/Users/admin/Desktop/djangoexcel/b.csv') as file:
reader = csv.reader(file)
for row in reader:
var = CSV_File4.objects.filter(
attr1=row[0], attr2=row[1], attr3=row[2], attr4=row[3], attr5=row[4],
)
if var.exists():
TemplateResponse(request, "documents/replace_entry.html", {'var' : var})
else:
for row in reader:
switch = CSV_File4.objects.filter(
attr6=row[5], attr7=row[6], attr8=row[7], attr9=row[8]
)
if var2.exists():
TemplateResponse(request, "documents/replace_entry.html", {'var2' : var2})
else:
for row in reader:
_, p = CSV_File4.objects.get_or_create(
attr1=row[0], attr2=row[1], attr3=row[2], attr4=row[3], attr5=row[4],
attr6=row[5], attr7=row[6], attr8=row[7], attr9=row[8]
)
return redirect('documents:index')
form = UploadFileForm()
return render(
request, "documents/csv_upload.html", {"form": form}
)
它看起来应该像这样。 我该如何进行这项工作。 这只是使用filter()和exist()的一个主意,但是有没有Python的方式可以做这样的事情? 任何帮助,将不胜感激。
当前,您正在尝试递归遍历reader
三遍。 这是不可能的,因为它是一个Iterator
,而不是list
。 无论如何,在跳到下一行之前,您只需要执行一次,然后在该特定行上工作即可。
def import_csv(request):
if request.method == "POST":
with open('C:/Users/admin/Desktop/djangoexcel/b.csv') as file:
reader = csv.reader(file)
for row in reader:
ds1 = CSV_File4.objects.filter(
attr1=row[0], attr2=row[1], attr3=row[2], attr4=row[3], attr5=row[4],
).exists()
ds2 = CSV_File4.objects.filter(
attr6=row[5], attr7=row[6], attr8=row[7], attr9=row[8]
).exists()
if ds1:
pass # Process first dataset
if ds2:
pass # Process second dataset
if not (ds1 and ds2):
_, p = CSV_File4.objects.get_or_create(
attr1=row[0], attr2=row[1], attr3=row[2], attr4=row[3], attr5=row[4],
attr6=row[5], attr7=row[6], attr8=row[7], attr9=row[8]
)
return redirect('documents:index')
return render(
request, "documents/csv_upload.html", {"form": UploadFileForm()}
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.