我正在Django中接收从upload form
到views.py
的数据,并将其保存到DB(MongoDB)。但是数据太大,所以需要大量的时间和CPU。我知道为什么要花这么长时间,但我无法通过其他方式发送数据。。。
这是我的密码
csv_file = request.FILES["csv_file"]
file_type = request.POST.get("type", "")
file_data = csv_file.read().decode("utf-8")
if file_type == "val3":
lines = file_data.split("\n")
items = []
item = ""
for line in lines:
column = line.split(',')
try:
item = kokyaku( # HERE I'm calling `kokyaku` model every time
顧客CD = int(column[0]),
顧客補助CD = int(column[1]),
顧客名称s=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])
)
items.append(item)
except Exception as e:
print(e)
kokyaku.objects.bulk_create(items)
我每次都在循环中调用kokyaku
模型,所以它非常慢。。。我试着像这样把它作为list
的dicts
发送
item = {
"顧客CD" : int(column[0]),
.....
}
items.append(item)
因此,我可以避免每次调用kokyaku
,这使进程更快,但我的模型无法接收这种格式的数据。。。我能做什么?如果可能的话,我想用bulk_create
使它更快。。。
这是我的型号.py你知道吗
class kokyaku(models.Model):
顧客CD = models.IntegerField(blank=True)
顧客補助CD = models.IntegerField(blank=True)
顧客名称s = 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.TextField(blank=True)
電話番号 = models.IntegerField(blank=True)
データマッチ用電話番号 = models.IntegerField(blank=True)
契約状態 = models.CharField(max_length=2, blank=True)
def __str__(self):
string = str(self.顧客CD) + " - " + self.顧客名称
return string
最好是在for循环中逐个插入,您可以从csv文件创建一个项目列表,然后一次插入所有项目
相关问题 更多 >
编程相关推荐