gpt4 book ai didi

python - Django 读取/上传 CSV

转载 作者:太空狗 更新时间:2023-10-30 02:21:46 24 4
gpt4 key购买 nike

我需要上传并读取 CSV,然后保存到数据库。我是初学者,下面是我到目前为止使用“django-adaptors”(http://django-adaptors.readthedocs.org/en/latest/index.html)所取得的成就我知道它不是很多但我'我这样做只是为了了解更多 :)

我在代码的 View 位中苦苦挣扎(如下)。我不知道如何上传然后将文件读入 CodeCSvModel() 函数?谁能帮忙解释一下?非常感谢。 :)

views.py

from django.template import RequestContext
from django.shortcuts import render_to_response
from web.forms import codeUploadForm
from web.csvTools import CodeCSvModel


def codeImport(request):
# If we had a POST then get the request post values.
if request.method == 'POST':
form = codeUploadForm(request.POST, request.FILES)
# handle_uploaded_file(request.FILES['file'])

====[HELP HERE]=====

#form = codeUploadForm(request.POST)

CodeCSvModel.import_from_file(form['file'])



else:
form = codeUploadForm()
context = {'form':form}
return render_to_response('import.html', context, context_instance=RequestContext(request))

表单.py

class codeUploadForm(forms.Form):

file = forms.FileField()
place = forms.ModelChoiceField(queryset=Incentive.objects.all())

csvTool.py

from datetime import datetime
from adaptor.fields import *
from adaptor.model import CsvModel, CsvDbModel, ImproperlyConfigured,\
CsvException, CsvDataException, TabularLayout, SkipRow,\
GroupedCsvModel, CsvFieldDataException
from web.models import *



class CodeCSvModel(CsvModel):

codeid = CharField()
remotecode = CharField()
active = BooleanField()
created = DateField()
modified = DateField()
incentiveid = CharField()

class Meta:
delimiter = ";"
dbModel = Code

最佳答案

Django 仅在上传文件小于或等于 2.5MB 时才将其保留在内存中,否则它会写入临时位置。

您缺少的步骤是您实际将文件从内存/临时位置写入磁盘某处的位置,例如

if request.method == 'POST':
form = MyForm(request.POST, request.FILES)
if form.is_valid():
uploaded_file = request.FILES['html-file-attribute-name']

# Write the file to disk
fout = open("path/to/save/file/to/%s" % uploaded_file.name, 'wb')
for chunk in uploaded_file.chunks():
fout.write(chunk)
fout.close()

如果文件非常大,分块是可行的方法,因为 Django 会在写入磁盘之前将文件的每个 block 读入内存。如果您改为使用 read(),它会将整个文件读入内存,因此 block 是您最好的选择。

关于python - Django 读取/上传 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14160221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com