繁体   English   中英

将数据从CSV文件存储到数据库中

[英]Storing Data from a CSV File into a database

我有一个宿舍的同场的FileUpload从中我会采取一个CSV文件,并填充数据库之一的Django模型,我一直在试图为过去两天搜索如何做到这一点,但不能让该工作该如何导入csv数据到django模型中,问题是可行的,前提是我只有文件的路径,并且尝试了多种方法但未成功。 此外,在此之后,我尝试更努力地搜索, 在Django中上传后如何获得文件的绝对路径? 我看到了这个,但是即使那样我仍然无法正常工作,因为它显示了一些错误

我使用了此URL映射url(r'^test/$',views.FileUpload.as_view(),name="test")

但是它显示了一些名称空间错误。 请告诉我我应该怎么做,如果您对我有一些建议,我应该如何重新开始,我感到非常迷失。 我想从用户那里获取一个文件,然后填充数据库

这样( 我如何将.csv文件中的数据传输到Django的sqlite数据库中? )是否可以像我们可以创建一个带有接受csv的文件字段的表单,然后通过解析该表单来填充数据库那样,问题在于我们无法硬编码路径。 那么我们该怎么做。

编辑views.py

from django.views import View
class FileUpload(View):
    def post(self, request):
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            initial_obj = form.save(commit=False)
            data=initial_obj['document']
            with open((data),'rb') as csvfile:
                spamreader = csv.reader(csvfile)
                for row in spamreader:
                    _, created=Document.objects.get_or_create(
                    name=row[0],
                    description = row[1],
                    importance=row[2],
                    )

            initial_obj.save()
            form.save()
            return redirect('/')
        else:
            return render(request,'file_upload_form.html',{'form':form})

    def get(self, request):
        return render(request, 'file_upload_form.html', {'form': form,})

forms.py

class DocumentForm(forms.ModelForm):
    class Meta:
        model = Document
        fields = ('description', 'document', )

models.py

class Document(models.Model):
    name=models.CharField(max_length=50,blank=True)
    description=models.CharField(max_length=255, blank=True)
    importance=models.CharField(max_length=10, default="High")
    document = models.FileField(upload_to='documents/')
    uploaded_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.description

我没有收到任何错误,但是它没有将CSV文件中的数据保存到数据库中,而是将我重定向到必须执行上载的同一页面,并在文档字段中显示错误“此字段是必需的”。

更新 :我在这里解决了更多问题

您可以轻松地覆盖表单的clean()方法,并将自定义数据内容保存到数据库中

 def clean(self):
    super(DocumentForm, self).clean()
    import csv
    with open((self.cleaned_data['file']), 'rb') as csvfile:
    spamreader = csv.reader(csvfile)
    for row in spamreader:
        // DO WHATEVER YOU WANT

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM