如何独立的使用django结合openpyxl读取并保存excel中的数据?

使用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()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值