1. 生成4个Execl文件(分别表示学生信息表、课程信息表、成绩表、教师信息表),每个文件包含3列数据,其中每个单元格内的内容随机生成,并且每个Excel文件的数据行数不同
2. 创建一个SQLite数据库,命名为stu,其结构与Excel文件相符合
3. 将生成的4个Excel文件中的数据录入到stu数据库中。
import sqlite3
import openpyxl
import os
import random
import xlrd
#自动生成各类表
def generate_xls(fileName,model):
wb=openpyxl.Workbook()
sheet=wb.active
#名字元素集合
first=tuple('赵朱明张周李王')
middle=tuple('昕怡天宇茜一')
last=tuple('天如易一戈越星佳')
sex=tuple('男女')
#课程名称
subjects=('线性代数','高等数学','英语3','C语言','人工智能','软件工程','模拟电路','计算机操作系统','计算机组成原理','离散数学','大学物理')
#职称
title=('教授','副教授','研究员','副研究员','讲师')
#随机生产行数
n=random.randint(10,15)
#学生表
if model=='student':
sheet.append(['姓名','学号','性别'])
for i in range(n):
line=[]
r=random.randint(1,100)
name=random.choice(first)
#按一定概率生成只有两个字的中文名字
if r>50:
name=name+random.choice(middle)
name=name+random.choice(last)
#随机生成学号
sn=random.randint(202100000,202200000)
line.append(name)
line.append(str("%09d" % sn))
line.append(random.choice(sex))
sheet.append(line)
#课程表
elif model=='course':
sheet.append(['课程名称','任课老师','学生人数'])
for i in range(n):
line=[]
r=random.randint(1,100)
name=random.choice(first)
#按一定概率生成只有两个字的中文名字
if r>50:
name=name+random.choice(middle)
name=name+random.choice(last)
#随机生成人数
rn=random.randint(40,100)
line.append(random.choice(subjects))
line.append(name)
line.append(str(rn))
sheet.append(line)
#成绩表
elif model=='grade':
sheet.append(['姓名','学号','成绩'])
for i in range(n):
line=[]
r=random.randint(1,100)
name=random.choice(first)
#按一定概率生成只有两个字的中文名字
if r>50:
name=name+random.choice(middle)
name=name+random.choice(last)
#随机生成学号
sn=random.randint(202100000,202200000)
line.append(name)
line.append(("%09d" % sn))
line.append(random.randint(50,100))
sheet.append(line)
#教师表
elif model=='teacher':
sheet.append(['姓名','职称','性别'])
for i in range(n):
line=[]
r=random.randint(1,100)
name=random.choice(first)
#按一定概率生成只有两个字的中文名字
if r>50:
name=name+random.choice(middle)
name=name+random.choice(last)
line.append(name)
line.append(random.choice(title))
line.append(random.choice(sex))
sheet.append(line)
#保存数据,生成excel
wb.save(fileName)
#读取文件内容到数据库
def read_excel_to_db(fileName,dbName,mode):
# 打开文件excel
workBook = xlrd.open_workbook(fileName)
# 打开表格
table = workBook.sheets()[0]
# 计算文档有多少行
all_row = table.nrows
#打开数据库
# conn = sqlite3.connect('example2.db') # 连接数据库
conn = sqlite3.connect(dbName) # 连接数据库
# connect()方法,可以判断一个数据库文件是否存在,如果不存在就自动创建一个,如果存在的话,就打开那个数据库。
cur = conn.cursor() # 创建游标
if mode=='student':
#创建数据库表
cur.execute("DROP TABLE IF EXISTS students")
cur.execute("CREATE TABLE students(sname TEXT,sid TEXT, sex TEXT)")
for i in range(0, all_row):
data= table.row_values(i)
# 向表中插入一条数据
# print("插入第", i, "条")
cur.execute('''insert into students values('%s','%s','%s')''' % (data[0], data[1], data[2]))
elif mode=='course':
#创建数据库表
cur.execute("DROP TABLE IF EXISTS courses")
cur.execute("CREATE TABLE courses(cname TEXT,tname TEXT, snum TEXT)")
for i in range(0, all_row ):
data= table.row_values(i)
# 向表中插入一条数据
# print("插入第", i, "条")
cur.execute('''insert into courses values('%s','%s','%s')''' % (data[0], data[1], data[2]))
elif mode=='grade':
#创建数据库表
cur.execute("DROP TABLE IF EXISTS grade")
cur.execute("CREATE TABLE grade(sname TEXT,sid TEXT, sgrade TEXT)")
for i in range(0, all_row ):
data= table.row_values(i)
# 向表中插入一条数据
# print("插入第", i, "条")
cur.execute('''insert into grade values('%s','%s','%s')''' % (data[0], data[1], data[2]))
elif mode=='teacher':
#创建数据库表
cur.execute("DROP TABLE IF EXISTS teachers")
cur.execute("CREATE TABLE teachers(cname TEXT,title TEXT, sex TEXT)")
for i in range(0, all_row ):
data= table.row_values(i)
# 向表中插入一条数据
# print("插入第", i, "条")
cur.execute('''insert into teachers values('%s','%s','%s')''' % (data[0], data[1], data[2]))
if mode=='student':
for stu in cur.execute("select * from students"):
print(stu)
elif mode=='course':
for cou in cur.execute("select * from courses"):
print(cou)
elif mode=='grade':
for gra in cur.execute("select * from grade"):
print(gra)
elif mode=='teacher':
for tea in cur.execute("select * from teachers"):
print(tea)
cur.close()
# 提交当前事务,保存数据
conn.commit()
# 关闭数据库连接
conn.close()
if __name__=='__main__':
#判断是否生成?
if(os.path.exists('学生信息表.xlsx')):
print("学生信息表.xlsx已生成")
else:
generate_xls('学生信息表.xlsx','student')
if(os.path.exists('课程信息表.xlsx')):
print("课程信息表.xlsx已生成")
else:
generate_xls('课程信息表.xlsx','course')
if(os.path.exists('成绩表.xlsx')):
print("成绩表.xlsx已生成")
else:
generate_xls('成绩表.xlsx','grade')
if(os.path.exists('教师信息表.xlsx')):
print("教师信息表.xlsx已生成")
else:
generate_xls('教师信息表.xlsx','teacher')
print('*********'*14)
#读取信息插入数据库表中
print('学生信息表记录:')
read_excel_to_db('学生信息表.xlsx',"test.db",'student')
print('*********'*14)
print('课程信息表记录:')
read_excel_to_db('课程信息表.xlsx',"test.db",'course')
print('*********'*14)
print('成绩表记录:')
read_excel_to_db('成绩表.xlsx',"test.db",'grade')
print('*********'*14)
print('教师信息表记录:')
read_excel_to_db('教师信息表.xlsx',"test.db",'teacher')
print('*********'*14)
参考资料
https://www.cnblogs.com/hoganhome/p/12874614.html
https://blog.csdn.net/codeblank/article/details/114460155