目录

  • 序言
  • 背景
  • 思路
  • 代码及解析
  • 跋文

序言

小工具1.0版本,备份oracle存储过程的小工具上篇文章已经都了解完毕了,下面继续进行功能升级,2.0版本-表数据的导出功能。

背景

案例分析第四课-表数据导出工具
表数据导出功能其实借助工具(譬如PLSQL Developer)都是可以实现的,但是为了学习知识以及丰富我们的工具的功能。今天一起来学习一下,并且和上篇中存储过程备份脚本结合到一起。

思路

1.首先回顾一下昨天的界面:

2.大概设计一下表数据导出的界面。
(1)填写表名的输入框
(2)加上where条件是不是更完善
(3)再就是如果比较复杂的数据可能就需要写sql,所以也需要输入sql的输入框,
(4)我们可以把表名和sql的输入框进行合并,用一个选择框来决定是表名还是sql。
(5)最后得有一个【导出数据】的按钮
综上所述,并结合昨天的界面,大概得到界面如下图所示:

代码及解析

根据上述的界面,用tkinter开始编写代码(建议先看看关于tkinter模块的具体用法):
1.结合昨天的代码,先得写出这个界面,代码如下:

import tkinter
from tkinter import *menuwin = tkinter.Tk()
menuwin.title('QfTool')screenwidth = menuwin.winfo_screenwidth()
screenheight = menuwin.winfo_screenheight()
width = 315
height = 500
menuwin.maxsize(width, height)  # 设置窗口最大化
size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2 - 50)
menuwin.geometry(size)v_user = tkinter.StringVar()
v_pass = tkinter.StringVar()
v_orcl = tkinter.StringVar()
v_path = tkinter.StringVar()
v_where = tkinter.StringVar()tkinter.Label(menuwin, text='-------------------------------------oracle连接-------------------------------------',width=40).grid(padx=10, pady=5, row=0, column=0, columnspan=4, sticky='w')tkinter.Label(menuwin, text='用户名:', width=10).grid(padx=10, pady=5, row=1, column=0, sticky='w')
tkinter.Entry(menuwin, textvariable=v_user, relief='flat', width=25).grid(padx=10, pady=5, row=1, column=1)tkinter.Label(menuwin, text='口令:', width=10).grid(padx=10, pady=5, row=2, column=0, sticky='w')
tkinter.Entry(menuwin, textvariable=v_pass, relief='flat', width=25,show='*').grid(padx=10, pady=5, row=2, column=1)tkinter.Label(menuwin, text='数据库:', width=10).grid(padx=10, pady=5, row=3, column=0, sticky='w')
tkinter.Entry(menuwin, textvariable=v_orcl, relief='flat', width=25).grid(padx=10, pady=5, row=3, column=1)# 功能1-备份存储过程
tkinter.Label(menuwin, text='-------------------------------------备份oracle存过-------------------------------------',width=40).grid(padx=10, pady=5, row=4, column=0, columnspan=4, sticky='w')tkinter.Button(menuwin, text='重置', width=11).grid(padx=10, pady=5, row=5, column=0, sticky='s')
tkinter.Button(menuwin, text='路径', width=24).grid(padx=10, pady=5, row=5, column=1, sticky='s')tkinter.Entry(menuwin, textvariable=v_path, relief='flat', width=40,state='disabled').grid(padx=10, pady=5, row=6, column=0, columnspan=4)tkinter.Button(menuwin, text='备份存过',width=40).grid(padx=10, pady=5, row=7, column=0, columnspan=4, sticky='w')# 功能2-提取数据
tkinter.Label(menuwin, text='-------------------------------------导出oracle数据-------------------------------------',width=40).grid(padx=10, pady=5, row=8, column=0, columnspan=4, sticky='w')#选择sql语句导出还是整表导出
ButtonList = IntVar()  # IntVar 是tkinter的一个类,可以管理单选按钮tkinter.Radiobutton(menuwin, variable=ButtonList, value=0, text="表名").grid(padx=10,pady=5,row=9,column=0,sticky = 'w')
tkinter.Radiobutton(menuwin, variable=ButtonList, value=1, text="SQL语句").grid(padx=10,pady=5,row=9,column=1,sticky = 'w')sqltext=tkinter.Text(menuwin,width=40,height=5,fg = 'black')
sqltext.grid(padx=10, pady=5,row=10, column=0,columnspan=4)tkinter.Label(menuwin, text='WHERE条件:', width=10).grid(padx=10, pady=5, row=11, column=0, sticky='w')
tkinter.Entry(menuwin, textvariable=v_where, relief='flat', width=25).grid(padx=10, pady=5, row=11, column=1)#
tkinter.Button(menuwin,text='导出数据',width =40).grid(padx=10, pady=5, row=12, column=0, columnspan=4, sticky='w')#存储过程保存路径
save_path = ''# 界面一直显示
menuwin.mainloop()

运行结果如图:

2.按钮,输入框具体的功能以及代码:
1)【路径】【重置】【备份存过】按钮具体的代码如上篇文章。
2)【表名】【SQL语句】,决定下面输入框填写的类型是什么。如果输入表名,如BS_JOB_LOG(自建的日志表),则勾选【表名】;反之如果输入SELECT T.ETL_DT 批量日期, T.PROCNO 存储过程名称, T.TABLNO 目标表名称, T.STDATE 执行开始日期, T.ENDATE 执行结束日期, T.EXECST 批量执行状态, T.ERRESN 批量报错原因, T.INSNUM 入库笔数, T.SUSEDT 总耗时 FROM BS_JOB_LOG T WHERE T.ETL_DT = '20220222'则,勾选【SQL语句】;
3)【WHERE条件】则是针对,勾选表名时,单表数据量过大,且不需要整张表的数据,这时候加上筛选条件,譬如T.ETL_DT = '20220222',此处where省略。
4)【导出数据】,其实就是读取输入框中的表名或者sql语句,以及where条件,然后连接数据库去查询出数据结果,再将数据结果写入excle。这边涉及到写入excle的模块,首先得先安装模块,安装模块,只有打开CMD,输入pip install 模块名,譬如pip install xlwt,等到看到successful基本就ok。下面我们大概了解一下这两个模块:
(a)xlwt
该模块保存的excle文件为.xls格式,且最大行数为65536,所以对于数据量较大的表,这个模块就没法用了,该小工具一开始就用这个模块写的,具体用法大家自行百度。代码如下:

def wr_excle(all_data):#新建一个excelbook = xlwt.Workbook()#新建一个sheet页sheet = book.add_sheet('sheet1') #写表头i = 0for header in title:sheet.write(0,i,header)i+=1#写入数据for row in range(0,len(all_data)):for col in range(0,len(all_data[row])):sheet.write(row+1,col,all_data[row][col])row+=1col+=1getdatetime()file_name = file_name1+localtime2+".xls"book.save(file_name)tkinter.messagebox.showinfo("消息","excle导出成功")

(b)openpyxl
保存的excle格式为.xlsx,且最大行数限制为1048576,基本上是够用了(因为我下过一个60w的数据,结果卡死了,哈哈哈,后面有时间进行性能优化),具体用法大家自行百度。代码如下:

def writetoxlsx(all_data):outwb = openpyxl.Workbook()  # 打开一个将写的文件#outws = outwb.create_sheet(index=0)  # 在将写的文件创建sheetws = outwb.active#写表头i = 1for header in title:ws.cell(row = 1,column=i,value = "%s" % header)i+=1for row in range(0,len(all_data)):for col in range(0,len(all_data[row])):ws.cell(column=col+1,row=row+2,value = "%s" % all_data[row][col])row+=1col+=1getdatetime()file_name = file_name1+localtime2+".xlsx"outwb.save(file_name)  # 保存结果tkinter.messagebox.showinfo("消息","excle导出成功")

3.将写好的代码打包成exe,上篇没有提到如何打包exe,python中有个模块pyinstaller。首先安装模块,上面提到了pip install pyinstaller,然后准备好开发好的脚本(这里也可以添加图标),在脚本页打开Windows PowerShell,输入命令:pyinstaller -F -i 1.ico 2.py --noconsole,等到看到successful基本就ok。关于【pyinstaller】具体用法自行百度啊。一切准备就绪后,开始运行exe:
1)选择【表名】的运行示意图,如图所示:

2)选择【SQL语句】的运行示意图,如图所示::

3)比对一下excle的内容:

数据结果是一致的,但是由于【SQL语句】的不确定性,导致导出的数据表头无法获取,需要手动添加,目前还没有想到好的办法,大家有好的办法也可以提供交流交流。

跋文

表数据导出工具可以将一些简单的表数据或者简单sql的数据结果导出成excle,功能上比较简单,实用性也还行吧,哈哈哈。再结合上篇的存储过程备份,小工具已经有了大概的雏形,后续也会继续对小工具进行更新优化,拭目以待。大家有一些比较实用的功能什么的也可以提出来,大家可以一起想办法去实现。

莫愁前路无知己。路漫漫其修远兮。
分享工作学习经验,相交流,共进步。

文中涉及的源代码,以及打包好的exe,可在公众号中回复【004】获得。

最后附上WX公众号:
WX搜索【前路漫漫】

【Python的自学之路】(六):案例分析第四课-小工具2.0相关推荐

  1. 【Python的自学之路】(五):案例分析第三课

    目录 序言 背景 思路 代码及解析 跋文 序言 上次谈到了GUI框架tkinter,今天就基于这个模块,开发一个工作中用到的小工具.备份存储过程的小工具. 背景 案例分析第三课-备份存储过程小工具 前 ...

  2. 【Python的自学之路】(二):学习python的基础知识

    目录 序言 内容 跋文 序言 通过#[Python的自学之路](一)学习python的第一课#之后,我想基本上python环境工具等都安装好了吧,下面我们就先一起来了解了解一下python. 内容 p ...

  3. 我的python爬虫自学之路

    昨天开始装装插件,找找博客,看看知乎,开始我的python的自学之路.惭愧,我算是一个只有三分钟热度的人,挖个坑督促一下自己.希望能坚持把坑填上. 先来盘点一下昨天完成的事,以及接下来的计划. 看完两 ...

  4. 非线性有限元:基本理论与算法及基于Python、Fortran程序实现与案例分析实践技术

    有限单元法在岩土工程问题中应用非常广泛,很多商业软件如Plaxis/Abaqus/Comsol等都采用有限单元解法.尽管各类商业软件使用方便,但其使用对用户来说往往是一个"黑箱子" ...

  5. 非线性有限元:基本理论与算法及基于Python、Fortran程序实现与案例分析

    非线性有限元:基本理论与算法及基于Python.Fortran程序实现与案例分析 (qq.com) 有限单元法在岩土工程问题中应用非常广泛,很多商业软件如Plaxis/Abaqus/Comsol等都采 ...

  6. 岩土工程--非线性有限元:基本理论与算法及基于Python、Fortran程序实现与案例分析

    非线性有限元:基本理论与算法及基于Python.Fortran程序实现与案例分析实践技术 有限单元法在岩土工程问题中应用非常广泛,很多商业软件如Plaxis/Abaqus/Comsol等都采用有限单元 ...

  7. 词达人小工具2.0 开放源码 C/Python

    词达人小工具2.0 开放源码 C/Python 使用前请阅读注意事项 还是老样子,工具连接:点此下载 配置Fidder:教程已更新:点此进入 参考第一版使用方法 第一版使用连接 额外注意事项 无法使用 ...

  8. Python的自学之路:Python基础(一)

    声明:我写博客不是为了什么,只是为了记录自己的学习状态,学过的知识点!方便以后进行好的复习!python小白,勿喷 python环境的搭建,在这里就不细说了,这里有我的链接,可以参考一下:https: ...

  9. 微观经济学案例分析(四)

    4.1 中国的生育率在下降吗?为什么? 案例内容 据<北京晚报>报道,近日中国社科文献出版社推出<中国人太多了吗?> 研究报告,该报告由美国斯坦福大学经济学博士梁建章,北京大学 ...

最新文章

  1. Shiro第一个程序:官方快速入门程序Qucickstart详解教程
  2. anaconda怎么使用编写python_怎样使用anaconda编辑python
  3. TensorFlow1.0正式发布,AI圈“互怼”那些事儿 | AI科技评论周刊
  4. Mybatis使用generator自动生成映射配置文件信息
  5. Tensorflow笔记(基础):批处理(batch_normalization)
  6. 数学建模第七章 数理统计
  7. 【Docker端口映射】
  8. 华硕服务器 u盘安装系统,华硕台式机重装系统详细图解步骤
  9. 运输问题中产销不平衡问题(表上作业法和LINGO方法)
  10. 软件测试简历常见问题
  11. 如何设计高品质LoRa无线模块
  12. linux 进程带宽限制,如何限制网络带宽在Linux上
  13. 计算机音乐谱大全好汉歌,吉他曲谱好汉歌_《好汉歌》的吉他乐谱
  14. 常见TCP/IP、HTTP协议以及三次握手和四次挥手
  15. ecshop清空购物车提醒,ecshop购物车,ecshop清空购物车,ecshop提醒信息,ecshop清空操作提示
  16. P1463 [POI2001][HAOI2007]反素数 题解
  17. 幂法求矩阵的最大特征值和对应特征向量
  18. dns 劫持什么意思、dns 劫持原理及几种解决方法
  19. [Matlab]LMS滤波器设计
  20. Ajax实现点击导航栏只切换页面内容,导航栏不变

热门文章

  1. protel99 PCB放汉字方法
  2. ubuntu做文件服务器,简单主文件服务器(基于Ubuntu)
  3. JS中的if语句失效
  4. Linux安装Maven 3.8.4
  5. 做企业推广的18种最有效的推广方式
  6. 【作品资料库】scratch作品之色彩跳跃小游戏
  7. 液晶显示器的工作原理
  8. 【数据结构】单链表和双向循环链表
  9. Qwt源码解读之平移操作类
  10. DSP/关于TMS320F28335的作业题