小工具(读取Excel数据并存入数据库表)

读取Excel数据并保存到数据库

  • 1.连接数据库
  • 2.读取Excel数据并插入数据库
  • 3.封装小工具,实现一键导入数据库
    • 3.1创建界面[tk.Tk()]
    • 3.2按钮绑定事件
      • (1)连接数据库测试
      • (2)重置数据按钮
      • (3)导入数据按钮
  • 4.工具封装

需求:公司测试数据存放在excel表,文件毕竟乱 查看起来比较复杂 于是想到一个方法将数据存放在数据库,用web页面展示出来,方便查看和统计。

1.连接数据库

下面展示一些 代码片

#  用于连接数据库
class MysqlConnect:
    def open(self):
        '''
        连接数据库
        使用cursor()方法创建一个游标对象
        :return:
        '''
        self.db = pymysql.Connect(
            host='数据库地址',
            port='端口号',
            user='用户名',
            passwd='密码',
            db='库名称',
            charset='utf8'
        )
        self.cursor = self.db.cursor()



    def close(self):
        '''
        关闭数据库
        :return:
        '''
        self.db.close()
        self.cursor.close()

2.读取Excel数据并插入数据库

下面展示一些 代码片

#  写一个函数 读取excel数据
    def update_data(self):
        #插入数据
        home_path = os.getcwd()
        file_path = os.path.join(home_path, 'case.xlsx')
        data1 = xlrd.open_workbook(file_path)

        # 读取第一个工作表
        table = data1.sheets()[0]
        # 统计行/列数
        row_num = table.nrows

        for i in range(1,row_num):
            cells = table.row_values(i)
            # print(cells[0])
            self.open()
            query = "INSERT INTO `tese_case`.`tese_case`(`Moudle`, `Project`, `Url`, `Method`, `Headers`, `Leve`, `Case_Param`, `Assert`, `Case_PerProcessor`, `Describe`) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % (
            cells[0], cells[1], cells[2], cells[3], cells[4], cells[5], cells[6], cells[7], cells[8], cells[9])
            //可根据插入到位置进行调整数据
            print(query)
            self.cursor.execute(query)
            self.db.commit()    #提交

3.封装小工具,实现一键导入数据库

小工具(读取Excel数据并存入数据库表)_第1张图片

3.1创建界面[tk.Tk()]

安装tkinter三方插件
下面展示一些 内联代码片

// 安装tkinter
pip3 install tkinter
# 创建主窗体
class df():
    def __init__(self):
        self.mac = tk.Tk()  # 创建Tk对象
        # 设置主窗体大小
        self.winWidth = 860
        self.winHeight = 620
        # 获取屏幕分辨率
        self.screenWidth = self.mac.winfo_screenwidth()
        self.screenHeight = self.mac.winfo_screenheight()
        # 计算主窗口在屏幕上的坐标
        x = int((self.screenWidth - self.winWidth) / 2)
        y = int((self.screenHeight - self.winHeight) / 2)
        # 设置主窗口标题
        self.mac.title("读取Excel存入数据库 V1.0")
        # 设置主窗口大小
        self.mac.geometry("%sx%s+%s+%s" % (self.winWidth, self.winHeight, x, y))
        # 设置窗口宽高固定
        self.mac.resizable(0, 0)
// 设置窗体样式 这里我分为3个panle
    # 样式设置 使用固定布局
    def panel(self):
        # 创建多个frame
        frm1 = tk.Frame(self.mac, width=600, height=300, relief="sunken", bd=2).place(x=30, y=5)
        frm2 = tk.Frame(self.mac, width=600, height=130, relief="sunken", bd=2).place(x=30, y=305)
        frm3 = tk.Frame(self.mac, width=600, height=130, relief="sunken", bd=2).place(x=30, y=435)
        

        self.label_text = tk.StringVar()
        self.label_text.set("控制台日志输出...")

        # 容器一布局
        tk.Label(frm1, text="数据库信息").place(x=300, y=10)
        tk.Label(frm1, text="host:").place(x=100, y=80)
        self.hosten = tk.Entry(frm1, textvariable=self.host, width=40, relief="sunken", bd=1)
        self.hosten.place(x=150, y=80)

        tk.Label(frm1, text="port:").place(x=100, y=120)
        self.proten = tk.Entry(frm1, textvariable=self.pro, width=40, relief="sunken", bd=1)
        self.proten.place(x=150, y=120)

        tk.Label(frm1, text="user:").place(x=100, y=160)
        self.useten = tk.Entry(frm1, textvariable=self.user, width=40, relief="sunken", bd=1)
        self.useten.place(x=150, y=160)

        tk.Label(frm1, text="pasd:").place(x=100, y=200)
        self.passten = tk.Entry(frm1, textvariable=self.pasd, show='*', width=40, relief="sunken", bd=1)
        self.passten.place(x=150, y=200)

        tk.Label(frm1, text="db:").place(x=100, y=240)
        self.dbten = tk.Entry(frm1, textvariable=self.db, width=40, relief="sunken", bd=1)
        self.dbten.place(x=150, y=240)

        tk.Label(frm1, textvariable=self.label_text, fg="red", wraplength=205, justify='left').place(x=640, y=50)


        # 容器二布局
        tk.Label(frm2, text="Excel地址").place(x=300, y=320)
        tk.Label(frm2, text="Excel全路径:").place(x=80, y=360)
        self.execlen = tk.Entry(frm2, textvariable=self.exec, width=36, relief="sunken", bd=1)
        self.execlen.place(x=182, y=360)

        # 容器三信息
        tk.Label(frm3, text="MySql插入语句").place(x=290, y=450)

        tk.Label(frm3, text="INSERT INTO").place(x=70, y=490)
        self.table = tk.Entry(frm3, textvariable=self.tablename, width=8, bd=1)
        self.table.place(x=160, y=490)

        self.tablehead = tk.Entry(frm3, textvariable=self.tablehead, width=40, bd=1)
        self.tablehead.place(x=240, y=490)

        tk.Label(frm3, text="VALUES").place(x=40, y=520)
        tk.Label(frm3, text="(Excel表动态数据,暂时写死)").place(x=105, y=520)

        btncz = tk.Button(frm1, text='连接测试',command = self.mysqltest,width=8, height=2)
        btncz.place(x=540, y=165)

        btncz = tk.Button(frm1, text='重置所有',command = self.clear,width=8, height=2)
        btncz.place(x=100, y=575)

        btndr = tk.Button(text='导入数据',command = self.update_data ,width=8, height=2)
        btndr.place(x=540, y=575)

        # 阻止窗口关闭(循环监听)
        self.mac.mainloop()
        
if __name__ == '__main__':
    s = df()
    s.panel()

3.2按钮绑定事件

(1)连接数据库测试

我使用的是本地docker上搭建的mysql数据库

#连接本地数据
    def mysqltest(self):
        try:
            self.db = pymysql.Connect(
                host=self.hosten.get(),   # 输入框数据直接传入
                port=int(self.proten.get()),
                user=self.useten.get(),
                passwd=self.passten.get(),
                db=self.dbten.get(),
                charset='utf8')
            self.cursor = self.db.cursor()
            self.label_text.set(self.cursor)
        except Exception as error_message:
            self.label_text.set("数据库连接异常!请检查账号密码是否正确... %s" % error_message)
            print("数据库连接异常", error_message)

(2)重置数据按钮

// 绑定 按钮清空数据
    def clear(self):  # 创建函数,触发事件时被调用
        self.host.set('')
        self.pro.set('')
        self.user.set('')
        self.pasd.set('')
        self.db.set('')
        self.exec.set('')
        self.tablename.set('')
        self.tablehead.set('')

(3)导入数据按钮

    # Excel数据写入
    def update_data(self):
        excel_path = os.path.exists(self.execlen.get())  # True/False
        if excel_path == True:

            databook = xlrd.open_workbook(self.exec.get())

            # 读取第一个工作表
            table = databook.sheets()[0]
            # 统计行/列数
            row_num = table.nrows

            for i in range(1, row_num):
                cells = table.row_values(i)
                table_name = self.name.get()
                headline = self.head.get()

                query = "INSERT INTO "+table_name+headline+"VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % (
                    cells[0], cells[1], cells[2], cells[3], cells[4], cells[5], cells[6], cells[7], cells[8], cells[9])		#注意和表格相对应
                self.cursor.execute(query)
                self.db.commit()  # 提交
                self.label_text.set("写入完毕...请查看数据库。")
        else:
            self.label_text.set("文件地址错误或文件不存在!!!")

4.工具封装

使用pyinstaller进行封装

#安装pyinstaller -
pip3 install pyinstaller
#使用pyinstaller打包 主要打包一定要在根目录进行打包
pyinstaller -T xxx.py

打包成功后如下显示:
小工具(读取Excel数据并存入数据库表)_第2张图片
进入dist文件夹就是打包好的程序了!
小工具(读取Excel数据并存入数据库表)_第3张图片

你可能感兴趣的:(---小工具专栏---,python)