数据库分表查询数据

134 阅读1分钟

需求:

多个学生的信息按照学生的uid%128分布在 编号为0-127的 128张表中,现 期望验证下,某班级所有学生的成绩信息

方式1:sql语句

方式:2:python脚本方式

思路:

  1. 创建循环, 从128张表中,取出符合条件的数据,并分别存储在对应的excel表中

  2. 将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)