使用pip安装django和openpyxl是必须的,至于django如何创建模型,如何使用django的orm操作数据库不在我们的讨论范围,本篇就以一个简单的案例来看django是如何配合openpyxl来获取数据并保存进数据库的!
import sys
import os
import django
from openpyxl import load_workbook
sys.path.insert(0, os.path.abspath(''))
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
django.setup()
from django.db import IntegrityError
from django.conf import settings
from django.contrib.auth import get_user_model
from users.models import RootAdmin, NewStudents, Major, SeniorStudents
User = get_user_model()
def get_excel(file_path, sheet_num=0):
""" 获取一个excel对象
"""
wb = load_workbook(file_path, read_only=True, data_only=True)
name = wb.sheetnames
excel = wb[name[sheet_num]]
return excel
def save_major():
"""生成专业数据
"""
major_list = ['信息管理', '大数据', '电子商务', '计算机科学']
for name in major_list:
Major.objects.update_or_create(
name=name,
defaults={
'name':name
}
)
print(f'-------专业{name}生成成功--------')
# 导入管理员数据
def save_root_user():
file_path = settings.BASE_DIR / 'data/管理员.xlsx'
excel = get_excel(file_path=file_path)
for row in list(range(1, excel.max_row+1)):
if row != 1:
name = excel.cell(row=row, column=1).value.strip()
username = str(excel.cell(row=row, column=2).value).strip()
password = str(excel.cell(row=row, column=3).value).strip()
try:
user = User.objects.create_user(
username=username,
password=password,
is_staff=True,
is_active=True,
is_superuser=True
)
root = RootAdmin.objects.create(user=user, name=name)
print(f"-----姓名:{root.name}的管理员账号{user.username}生成成功------")
except IntegrityError:
pass
def save_new_students():
"""批量处理保存新生
"""
excel_path = settings.BASE_DIR / 'data/新生.xlsx'
excel = get_excel(file_path=excel_path)
for row in list(range(1, excel.max_row+1)):
if row != 1:
name = excel.cell(row=row, column=1).value.strip()
city = excel.cell(row=row, column=2).value.strip()
major = Major.objects.get(id=int(excel.cell(row=row, column=3).value))
username = str(excel.cell(row=row, column=4).value).strip()
password = str(excel.cell(row=row, column=5).value).strip()
try:
user = User.objects.create_user(username=username, password=password)
news = NewStudents.objects.create(user=user, name=name, city=city, major=major)
print(f"-----姓名:{news.name}的账号{user.username}生成成功------")
except IntegrityError:
pass
def save_senior_students():
"""批量处理保存学长
"""
excel_path = settings.BASE_DIR / 'data/学长.xlsx'
excel = get_excel(file_path=excel_path)
for row in list(range(1, excel.max_row+1)):
if row != 1:
name = str(excel.cell(row=row, column=1).value).strip()
username = str(excel.cell(row=row, column=2).value).strip()
password = str(excel.cell(row=row, column=3).value).strip()
count = excel.cell(row=row, column=4).value
major = Major.objects.get(id=int(excel.cell(row=row, column=5).value))
area = str(excel.cell(row=row, column=6).value).strip()
content = excel.cell(row=row, column=7).value
try:
user = User.objects.create_user(username=username, password=password)
senior = SeniorStudents.objects.create(user=user, name=name, area=area, major=major, content=content)
print(f"-----姓名:{senior.name}的账号{user.username}生成成功------")
except IntegrityError:
pass
if __name__ == "__main__":
save_major()
save_root_user()
save_new_students()
save_senior_students()