需求:公司测试数据存放在excel表,文件毕竟乱 查看起来比较复杂 于是想到一个方法将数据存放在数据库,用web页面展示出来,方便查看和统计。
下面展示一些 代码片
。
# 用于连接数据库
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()
下面展示一些 代码片
。
# 写一个函数 读取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() #提交
安装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()
我使用的是本地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)
// 绑定 按钮清空数据
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('')
# 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("文件地址错误或文件不存在!!!")
使用pyinstaller进行封装
#安装pyinstaller -
pip3 install pyinstaller
#使用pyinstaller打包 主要打包一定要在根目录进行打包
pyinstaller -T xxx.py