将.csv保存到数据库时发生错误:-'列表索引超出范围'

时间:2018-07-14 11:12:31

标签: django python-3.x django-models django-rest-framework

def import_db(request):
    f=open('product.csv','r')
    for row in f:
      row =  row.split('!')
      tmp = AdminProduct.objects.create()

      tmp.id = row[0]
      tmp.productname = row[1]
      tmp.barcode = row[2]
      tmp.company = row[3]
      tmp.size = row[4]
      tmp.price = row[5]
      tmp.description = row[6]
      tmp.category = row[7]
      tmp.subcategory = row[8]
      tmp.product_tag = row[9]
      tmp.image = row[10]
      tmp.save()

    f.close()   

将.csv文件保存到数据库时发生此错误(列表索引超出范围)。

3 个答案:

答案 0 :(得分:0)

请确保文件中的每一行在分割后产生11个单词   row = row.split('!') 或在将值分配给tmp对象之前添加条件

if len(row)==11:
     #assign vlaues here & save

答案 1 :(得分:0)

1)您应该使用注释中提到的正确的csv库

2)您应该注意从CSV加载的数据类型

鉴于我们掌握的信息很少,要回答您的问题,我想您应该使用.split(",")而不是.split("!")

答案 2 :(得分:0)

import csv #will get csv from python

def import_db(request):
    with open('product.csv','r') as csv_file:
    csv_reader = csv.reader(csv_file)
    row1=True   #will skip your first row and mismatching of variable type
    for row in csv_reader:
        if row1:
            row1 = False
            continue

        tmp = AdminProduct.objects.create(
             id          = row[0],
             productname = row[1],
             barcode     = row[2],
             company     = row[3],
             size        = row[4],
             price       = row[5],
             description = row[6],
             category    = row[7],
             subcategory = row[8],
             product_tag = row[9],
             image       = row[10],
             )
    return redirect('/somewhere/')   

当您上传.csv时,其背后的逻辑与在网络上相同,您需要检查的是您要插入的.csv数据的数据类型以及数据库表具有的匹配列。两者必须相同。
另外,最好使用某种库来导入.csv文件。
希望这可以帮助..!