本文环境配置:
系统=>windows10:64位
工具=>PyCharm:2018.3.1
语言=>Python:3.7.1
第三方库
PyQT5:5.11.3
pyqt5-tools:5.11.3.1.4
PyMySQL:0.9.3
openpyxl:2.5.12
练手:制作一个数据库导入窗口
Qt Designer设计界面
控件元素:
3个QLabel:第一个label在最下方,用于显示执行的时间,其余两个为标签
1个QLineEdit:显示文件的路径地址
1个QListWidget:显示打开的工作簿中所有的工作表名
2两个QPushButton:执行按钮
信号与槽:
"打开" 按钮对应槽函数:open()
"导入"按钮对应槽函数:to_mysql()
工作表名列集合对应的槽函数:set_tobtn()
编写代码
将.ui
文件转换成.py
文件,然后新建一个业务逻辑文件,把界面文件import
导入
open函数:
初始化"导入"按钮不可用,清空表名列集合
self.pushButton_2.setEnabled(False)
self.listWidget.clear()
调出选择文件对话框,可以默认打开的路径,以及筛选文件后缀
将选择的文件完整路径显示在lineEdit
文本框中
filename, _ = QFileDialog.getOpenFileName(self,'选择文件','G:projectExcel_to_MySQL','Excel files(*.xlsx , *.xls)')
self.lineEdit_2.setText(filename)
用第三方库openpyxl
打开选择的工作簿,采用只读模式read_only=True
self.wb.sheetnames
获取打开工作簿的所有工作表,然后添加到listWidget
self.wb = openpyxl.load_workbook(filename, read_only=True)
self.sheets = self.wb.sheetnames
self.listWidget.addItems(self.sheets)
set_tobtn函数:
默认"导入"按钮不能点击,当表名列集合被点击了,就执行set_tobtn函数,然后将"导入"按钮设置为可用。
to_mysql函数:
用pymysql
链接数据库
打开选中的表self.wb[表名]
,表名根据选中listWidget
返回self.listWidget.currentItem().text()
sheet = self.wb[self.listWidget.currentItem().text()] # 打开选中的表
sheet.max_row
:返回最大行数
sheet.max_column
:返回最大列数
executemany(templet,args)
能同时执行多条语句,执行同样多的语句可比execute()快很多,强烈建议执行多条语句时使用executemany
templet : sql模板字符串,
例如 'insert into table(id,name) values(%s,%s)'
args: 模板字符串的参数,是一个列表,列表中的每一个元素必须是元组!!!
例如: [(1,'小明'),(2,'zeke'),(3,'琦琦'),(4,'韩梅梅')]
最终完成效果,其实SQL执行才0.11秒,然而前面的循环用了12秒。不到300的数据啊
https://www.zhihu.com/video/1068290363336355840这一坨代码速度好慢,有待优化,望大神指教: