只有最后的excel数据才放在mod中

2024-06-28 19:54:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想解析excel并将数据放入模型(用户)中。但是现在,模型中只放最后一个excel数据,数据的数量是4。4是所有excel行的数量,如 excel

现在数据库sqlite3是

|10|Karen|||
|10|Karen|||
|10|Karen|||
|10|Karen|||

我的理想数据库sqlite3是

1|1|Blear|40|false|l
2|5|Tom|23|true|o
3|9|Rose|52|false|m
|10|Karen|||

所有的数据都要放进去。 为什么会出现这样的结果? 视图.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中有所有的数据。 型号.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)

我怎样才能解决这个问题?你知道吗


Tags: 数据nameidmodelsemployeeexcellengthmax
1条回答
网友
1楼 · 发布于 2024-06-28 19:54:31

在这个块的末尾rows只有最后一行的值(带有Karen的行)。你知道吗

for row_index in range(sheet.nrows):
  rows = sheet.row_values(row_index)  
  print(rows) 

现在,在完成上面的操作之后,当您执行下面的操作时,您正在对最后一行中的值进行迭代。还要记住,在for块中没有使用row,for块是一个在['',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()

请注意,我没有对标题行给予应有的注意。如果需要的话,请在你这边做。你知道吗

相关问题 更多 >