• Excel数据导入MySQL


    一、背景

    本章主要分享的是将Excel存放的数据导入到MySQL存放。

    二、准备工作

    1.安装Python3

    下载地址:https://www.python.org/downloads/windows/

    2.安装库

    pip install PyMySQL==1.0.2

    pip install xlrd==1.2.0

    三、代码

    Excel数据导入MySQL.py

    # _*_ coding:utf-8 _*_
    import pymysql, xlrd, os
    
    
    class SunckSql():
        def __init__(self, host, user, passwd, dbName='', charset='utf8'):
            self.host = host
            self.user = user
            self.passwd = passwd
            self.dbName = dbName
            self.charset = charset
    
        def connet(self):
            self.db = pymysql.connect(host=self.host, user=self.user, passwd=self.passwd, db=self.dbName,
                                      charset=self.charset)  # 连接数据库
            self.cursor = self.db.cursor()  # 获取操作游标
    
        def close(self):
            self.cursor.close()  # 释放游标
            self.db.close()  # 关闭数据库连接
    
        # 查询
        def get_all(self, sql):
            res = None
            try:
                self.connet()
                self.cursor.execute(sql)  # 执行sql语句
                res = self.cursor.fetchall()  # 返回查询所有结果
            except Exception as e:
                print('查询失败:%s' % e)
            finally:
                self.close()
            return res
    
        # 增加、删除、修改
        def shell_sql(self, sql):
            "执行sql语句"
            # print(sql)
            count = 0
            try:
                self.connet()
                count = self.cursor.execute(sql)  # 执行sql语句
                self.db.commit()  # 提交
            except Exception as e:
                print('事务提交失败:%s' % e)
                self.db.rollback()  # 如果提交失败,回滚到上一次数据
            finally:
                self.close()
            return count
    
    
    def get_xlsx(excel_path, sheet):
        "获取指定Excel数据"
        file = xlrd.open_workbook(excel_path)  # 打开excel
        list = []
        sheet = file.sheet_by_name(sheet)  # 获得指定sheet数据
        row_value1 = sheet.row_values(0)  # 获取第1行的标题
        nrows = sheet.nrows  # 获取当前sheet行数
        ncols = sheet.ncols  # 获取当前sheet列数
        for i in range(1, nrows):  # 从第2行遍历当前sheet
            row = sheet.row_values(i)  # 获取行数据
            dict = {}  # 创建空字典
            for j in range(0, ncols):  # 遍历sheet列,组成字典
                if row_value1[j] == '序号':
                    dict[row_value1[j]] = int(row[j])
                else:
                    dict[row_value1[j]] = row[j]  # 从第一列开始,将每一列的数据与第1行的数据组成一个键值对,形成字典
            list.append(dict)  # 将字典添加list中
        return list
    
    
    def get_sheet_name(excel_path):
        file = xlrd.open_workbook(excel_path)  # 打开excel
        sheets_name = file.sheet_names()
        return sheets_name
    
    
    def create_db(ip, name, passwd, db_name):
        db = SunckSql(ip, name, passwd)
        db.shell_sql("DROP DATABASE IF EXISTS %s;" % db_name)  # 删除数据库
        db.shell_sql("CREATE DATABASE IF NOT EXISTS %s CHARSET utf8;" % db_name)  # 创建数据库
    
    
    def excel_db1(ip, name, passwd, db_name, db_table, data):
        """创建数据表并插入数据"""
        my = SunckSql(ip, name, passwd, db_name)
        my.shell_sql(
            "CREATE TABLE IF NOT EXISTS %s (序号 INT (16) NOT NULL,题目 VARCHAR(8192),选项A VARCHAR (2048),"
            "选项B VARCHAR(2048), 选项C VARCHAR(2048),选项D VARCHAR(2048),答案 VARCHAR(32))" % db_table)  # 创建数据表
        for i in data:
            my.shell_sql(
                "INSERT INTO %s (序号,题目,选项A,选项B,选项C,选项D,答案) VALUES (%d,'%s','%s','%s','%s','%s','%s')" % (
                    db_table, i['序号'], i['题目'], i['选项A'], i['选项B'], i['选项C'], i['选项D'], i['答案']))  # 向数据表插入数据
    
    
    def excel_db2(ip, name, passwd, db_name, db_table, data):
        """创建数据表并插入数据"""
        my = SunckSql(ip, name, passwd, db_name)
        my.shell_sql(
            "CREATE TABLE IF NOT EXISTS %s (序号 INT (16) NOT NULL,题目 VARCHAR(8192),答案 VARCHAR(8192))" % db_table)  # 创建数据表
        for i in data:
            my.shell_sql(
                "INSERT INTO %s (序号,题目,答案) VALUES (%d,'%s','%s')" % (db_table, i['序号'], i['题目'], i['答案']))  # 向数据表插入数据
    
    
    def main(ip, name, passwd, db_name):
        excel_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '软件测试试题库.xlsx')  # 获取用例文件路径
        create_db(ip, name, passwd, db_name)  # 创建数据库
        sheet_name = get_sheet_name(excel_path)  # 获取Excel中sheet名称
        for i in range(0, len(sheet_name)):
            db_list = get_xlsx(excel_path, sheet_name[i])  # 获取sheet测试用例
            if i < 4:
                excel_db1(ip, name, passwd, db_name, sheet_name[i], db_list)  # excel数据导入mysql
                print('Excel数据导入mysql完成:%s' % sheet_name[i])
            else:
                excel_db2(ip, name, passwd, db_name, sheet_name[i], db_list)  # excel数据导入mysql
                print('Excel数据导入mysql完成:%s' % sheet_name[i])
    
    
    if __name__ == '__main__':
        main(ip='数据库ip地址', name='mysql账号', passwd='mysql密码', db_name='软件测试试题库')
     
    —————————————————————————————— 选择正确的事、再把事做正确 ——————————————————————————————
  • 相关阅读:
    唯一的确定一棵二叉树
    Educational Codeforces Round 55 (Rated for Div. 2)
    524 (Div. 2) Masha and two friends
    单链表实现n(n≥20)的阶乘
    表达式的后缀表示
    UPCOJ2012 The King’s Walk(dp)
    第七届山东省省赛D Swiss-system tournament(归并排序)
    第七届山东省省赛C Proxy(最短路)
    hihocoder1185 连通性·三
    hihocoder1184 连通性二·边的双连通分量
  • 原文地址:https://www.cnblogs.com/airb/p/14272420.html
Copyright © 2020-2023  润新知