需求:
多个学生的信息按照学生的uid%128分布在 编号为0-127的 128张表中,现 期望验证下,某班级所有学生的成绩信息
方式1:sql语句
方式:2:python脚本方式
思路:
-
创建循环, 从128张表中,取出符合条件的数据,并分别存储在对应的excel表中
-
将excel表中的数据合并到一张表中,并删除掉128张excel表格
代码如下:
import pymysql
import xlsxwriter # excel write
import os
import pandas as pd
def getLesson(class_id):
all_data = 0
for m in range(0, 128):
xls_name = 'TestExcle' + str(m)+ ".xls"
wb = xlsxwriter.Workbook(xls_name) # 创建Excel文件
sheet = wb.add_worksheet('Test_sheet') # 创建一个工作表对象
bold = wb.add_format({'bold': True}) # 定义一个加粗的格式对象
L = [] # 将数据库表中的字段列出,作为excel表格的列项
# 将列名称定义
for ifs in range(len(L)):
sheet.write(0, ifs, L[ifs], bold) # 将列名称插入表格
# 连接数据库
connect = pymysql.Connect(
host='',
port=,
user='',
passwd='',
charset='utf8'
)
# 获取游标
cursor = connect.cursor()
descsql = "desc dbname.tablename"
numcolumns = cursor.execute(descsql) # 获取列数
table_name = "tablename_" + str(m) # 前提:128张表的命名规则为统一前缀+id
sql = "SELECT * FROM dbname.%s WHERE class_id = %d"
print(sql % (table_name, course_id))
cursor.execute(sql % (table_name, course_id))
numrows = int(cursor.rowcount)
print("numrows:", numrows)
all_data += numrows # 所有表格合并后的数据行数
print("总共多少条数据:", all_data)
numrows = int(cursor.rowcount) # 获取行数
for i in range(numrows): # 将数据写入excel表格中
g = cursor.fetchone()
n = 0
for j in range(numcolumns):
sheet.write(i + 1, n, g[j]) # 行,列
n += 1
wb.close() # 关闭Excel文件
cursor.close()
connect.close()
def merge_excel(): # 将所有表格中的数据合并到一个总表中,前提:该目录下无其他excel文件
excels = [pd.read_excel(fname) for fname in os.listdir('./') if 'xls' in fname]
df = pd.concat(excels)
df.to_excel('总表.xlsx', index=False)
if __name__ == '__main__':
class_id = 8
getLesson(class_id)
merge_excel()
删除excel表
import os
def file_name(file_dir):
list = []
for root, dirs, files in os.walk(file_dir):
for file in files:
if(file.startswith("TestExcle")):
list.append(file)
return list
def del_file(list):
for i in range(len(list)):
print(list[i])
os.remove("." + '/' + list[i])
list = file_name(".")
# print(list)
del_file(list)