You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django导入CSV文件到数据库时遭遇‘iterator should return strings, not bytes’错误求助

Django导入CSV文件到数据库时遭遇‘iterator should return strings, not bytes’错误求助

嘿,我看到你在Django导入CSV到数据库时碰到了这个「iterator should return strings, not bytes」的错误,我来帮你解决这个问题!

先把你的问题场景和相关代码整理出来,方便排查:

遇到的错误提示

iterator should return strings, not bytes (the file should be opened in text mode)

我的视图函数代码

def import_excel(request):
    if request.method == 'POST':
        person_resource = PersonResource()
        dataset = Dataset()
        new_person = request.FILES['myfile']
        
        if not new_person.name.endswith('csv'):
            messages.info(request,'Wrong format')
            return render(request,'upload.html')
        
        imported_data = dataset.load(new_person.read(),format='csv')
        for data in imported_data:
            value = Person(
                data[0],
                data[1],
                data[2]
            )
            value.save()
        return render(request,'upload.html')

我的Person模型代码

class Person(models.Model):
    name    = models.CharField(max_length=200)
    marks   = models.IntegerField()
    
    def __str__(self):
        return self.name

问题原因&解决方案

问题的核心很简单:request.FILES['myfile'].read()返回的是字节流(bytes类型),但dataset.load()方法需要的是文本字符串(str类型),两者类型不匹配就抛出了这个错误。

给你两种简单的解决办法:

方法1:解码字节流为字符串

把导入数据的那一行修改为:

imported_data = dataset.load(new_person.read().decode('utf-8'), format='csv')

这里用decode('utf-8')把字节转换成UTF-8编码的字符串,如果你的CSV文件用的是其他编码(比如gbk),替换成对应编码即可。

方法2:直接以文本模式打开文件

也可以跳过read(),直接用文本模式打开上传的文件,这样读取出来的内容就是字符串:

imported_data = dataset.load(new_person.open('r'), format='csv')

两种方法都能解决问题,你可以根据自己的习惯选择~

备注:内容来源于stack exchange,提问作者swamy patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:48:13