我想解析excel并将数据放入模型中(User)。但是现在,只有最后一个excel数据放在模型中,数据的数量是4.4是所有excel行的数量
现在db.sqlite3是
|10|Karen|||
|10|Karen|||
|10|Karen|||
|10|Karen|||
我理想的db.sqlite3是
1|1|Blear|40|false|l
2|5|Tom|23|true|o
3|9|Rose|52|false|m
|10|Karen|||
所有数据都要放在那里。 为什么会出现这样的结果? views.py是
#coding:utf-8
from django.shortcuts import render
import xlrd
from .models import User
book = xlrd.open_workbook('../data/data.xlsx')
sheet = book.sheet_by_index(1)
for row_index in range(sheet.nrows):
rows = sheet.row_values(row_index)
print(rows)
def build_employee(employee):
if employee == 'leader':
return 'l'
if employee == 'manager':
return 'm'
if employee == 'others':
return 'o'
for row in rows:
is_man = rows[4] != ""
emp = build_employee(rows[5])
user = User(user_id=rows[1], name_id=rows[2], name=rows[3],
age=rows[4],man=is_man,employee=emp)
user.save()
当我在print(rows)
中打印出行时,结果为
Blear
Tom
Rose
Karen
所以我认为行包含excel中的所有数据。 models.py是
class User(models.Model):
user_id = models.CharField(max_length=200)
name_id = models.CharField(max_length=200)
name = models.CharField(max_length=200)
age = models.CharField(max_length=200)
man = models.BooleanField()
TYPE_CHOICES = (
('m', 'manager'),
('l', 'leader'),
('o', 'others'),
)
employee =models.CharField(max_length=1, choices=TYPE_CHOICES)
我该如何解决这个问题?
答案 0 :(得分:0)
在此块的末尾rows
只有最后一行的值(带Karen
的行)。
for row_index in range(sheet.nrows):
rows = sheet.row_values(row_index)
print(rows)
现在,在执行以下操作之后,您将迭代最后一行中的值。还记得你没有在for块中使用row
,这是一个迭代['',10,'Karen','','','']
的单个单元格值
for row in rows:
is_man = rows[4] != ""
emp = build_employee(rows[5])
user = User(user_id=rows[1], name_id=rows[2], name=rows[3],
age=rows[4],man=is_man,employee=emp)
user.save()
您应该按照以下方式更正上述块。
for row_index in range(sheet.nrows):
rows = sheet.row_values(row_index)
is_man = rows[4] != ""
emp = build_employee(rows[5])
user = User(user_id=rows[1], name_id=rows[2], name=rows[3],
age=rows[4],man=is_man,employee=emp)
user.save()
请注意,我没有对标题行采取适当的谨慎措施。如果需要,请在最后这样做。