因为每个人的数据库结构设计的不一样,所以只放一部分代码数据库使用的是mysql
包的版本如图所示
解析excel使用的是xlrd,在app下面新建一个read_excel.py文件
def price_parse_excel(excel_name):
cases = []
workbook = xlrd.open_workbook(excel_name)
sheets_list = workbook.sheet_names()
for i in range(len(sheets_list)):
tale = workbook.sheets()[i]
# 获取总行
nrows = tale.nrows
# 从第二行开始
for j in range(1, nrows):
row = tale.row_values(j)
cases.append(
{
‘type’: row[1],
‘time’: row[2],
“pr”: row[3],
}
)
return cases
然后写view中上传excel和将数据插入到mysql中的方法,因为我比较懒就写在一个函数里面了,这里是上传excel方法的实现, 其中UPLOAD_ROOT我是在setting.py中设置的
def upload_by_excel(request):
if request.method == “GET”:
return render(request, ‘jiesuan/test_hys.html’)
elif request.method == “POST”:
# userid = request.session.get(’_auth_user_id’)
# 获取上传的file名字
file = request.FILES.get(‘file’)
if not os.path.exists(UPLOAD_ROOT):
os.makedirs(UPLOAD_ROOT)
try:
if file is None:
return HttpResponse(‘请选择要上传的文件’)
with open(UPLOAD_ROOT + ‘/’ + file.name, ‘wb’) as fp:
for i in file.readlines():
fp.write(i)
然后调用上面的read_excel.py中的函数解析excel,并且用变量接受,然后可以通过遍历将excel中的数据插入到excel中,(有合并的单元格除了第一行数据会读出合并的数据外其它的都会读出Null)
cases = parse_excel(UPLOAD_ROOT + ‘/’ + file.name)
for project_info in range(len(cases)):
i = cases[project_info]
project.objects.create(PR=i[‘pr’], time=i['time‘], type=i['type])