首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django中的CSV到数据库

Django中的CSV到数据库
EN

Stack Overflow用户
提问于 2019-12-24 07:10:07
回答 1查看 430关注 0票数 0

我在我的站点上接收来自upload form的数据,我想将这些数据插入到Database中。在views.py中,我使用以下代码

代码语言:javascript
运行
复制
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中这个

代码语言:javascript
运行
复制
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.顧客名称

如您所见,我正在尝试将从viewsmodels的列与python的dict“匹配”,但在models中,我试图将它作为变量来获得,所以我的程序引发并错误地使用msg:int() argument must be a string, a bytes-like object or a number, not 'dict',但我不确定如何更改格式以将信息以dict的形式传递给models,或者更改格式以使models能够处理此问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-24 07:32:44

您可以简单地尝试键入它们,而不是为每个实例保存表单,您只需像这样将实例添加到数据库中即可。(即使是for也能工作,只需确保正确地键入它们,并且int()中没有奇怪的字符串)

代码语言:javascript
运行
复制
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]))

直接导入数据,您可能需要查看 表库 库。有一些有用的、有效的工具。具体来说,在django中,您可以使用django-进出口,它们可以很好地处理tablib。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59465133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档