python - CSV 到 Django 中的数据库
问题描述
我正在从upload form
我的网站上接收数据,我想将数据插入到Database
. 在views.py
我使用这个代码
def upload(request):
data = {}
if "GET" == request.method:
return render(request, "main/upload.html", data)
# if not GET, then proceed
csv_file = request.FILES["csv_file"]
if not csv_file.name.endswith('.csv'):
messages.error(request,'File is not CSV type')
return HttpResponseRedirect(reverse("main:upload"))
#if file is too large, return
if csv_file.multiple_chunks():
messages.error(request,"Uploaded file is too big (%.2f MB)." % (csv_file.size/(1000*1000),))
return HttpResponseRedirect(reverse("main:upload"))
file_data = csv_file.read().decode("utf-8")
lines = file_data.split("\n")
#io_string = io.StringIO(data_set)
#print(io_string.getvalue())
#next(io_string)
for line in lines:
column = line.split(",")
data_dict = {}
data_dict["顧客CD"]=column[0],
data_dict["顧客補助CD"]=column[1],
data_dict["顧客名称1"]=column[2],
data_dict["顧客名称"]=column[3],
data_dict["顧客名称カナ"]=column[4],
data_dict["法人名称"]=column[5],
data_dict["代表者名称"]=column[6],
data_dict["住所"]=column[7],
data_dict["電話番号"]=column[8],
data_dict["地区名称"]=column[9],
data_dict["データマッチ用電話番号"]=column[10],
data_dict["契約状態"]=column[11]
form = kokyaku(data_dict)
form.save()
return HttpResponseRedirect(reverse("main:upload"))
而在models.py
这
from djongo import models
from django.utils import timezone
from django.contrib.auth.models import User
class kokyaku(models.Model):
顧客CD = models.IntegerField(blank=True)
顧客補助CD = models.IntegerField(blank=True)
顧客名称1 = models.TextField(blank=True)
顧客名称 = models.TextField(blank=True)
顧客名称カナ = models.TextField(blank=True)
法人名称 = models.CharField(max_length=15, blank=True)
代表者名称 = models.CharField(max_length=15, blank=True)
住所 = models.TextField(blank=True)
電話番号 = models.IntegerField(blank=True)
地区名称 = models.TextField(blank=True)
データマッチ用電話番号 = models.IntegerField(blank=True)
契約状態 = models.CharField(max_length=2, blank=True)
def __str__(self):
return self.顧客名称
如您所见,我正在尝试将列 from views
tomodels
与 python's进行“匹配” dict
,但是models
我试图将其作为变量获取,因此我的程序会引发错误消息:
int() argument must be a string, a bytes-like object or a number, not 'dict'
但我不确定如何更改能够传递信息dict
的models
格式或更改格式以使其models
能够处理此问题
解决方案
您可以简单地尝试对它们进行类型转换,而不是为每个实例保存表单,您可以像这样将实例添加到数据库中。(即使 for 也可以,只要确保正确地对它们进行类型转换,并且 int() 中没有奇怪的字符串)
for line in lines:
column = line.split(",")
kokyaku.objects.create(顧客CD = column[0], 顧客補助CD = int(column[1]),顧客名称1=str(column[2]), 顧客名称=str(column[3]), 顧客名称カナ=str(column[4]), 法人名称=str(column[5]), 代表者名称=str(column[6]),住所=str(column[7]), 電話番号=str(int(column[8])),地区名称=str(column[9]),データマッチ用電話番号=int(column[10]),契約状態=str(column[11]))
要直接导入数据,您可能需要查看tablib库。它具有有用且高效的工具。特别是在 django 中,您可以使用django-import-export它们与 tablib 配合得很好。
推荐阅读
- flutter - gradle build 卡在执行 :app:compileFlutterBuildDebug
- python - 如何将包含 DateTimeField 的 Django 查询集转换为 Pandas 日期时间索引?
- java - GraalVM 原生镜像和 Oracle ojdbc11-21.1
- excel - 如果我在标题为“状态”的表中将下拉值更改为“已完成”(这应该针对整个列运行),但我只能为一个单元格做
- grails - 使用 wget 递归复制 grails maven 存储库
- json - 多部分请求上传文件和 JSON 消息
- c++ - 如何查找lua堆栈中有多少项目(值)
- javascript - 使用 module.export 从数据库查询中传递数据
- android - 颤振启动错误:版本解决失败
- jquery - 我想在 react js 中有相等的高度 div 。是否适合使用jquery等高插件?