目录

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

序言

上次谈到了GUI框架tkinter,今天就基于这个模块,开发一个工作中用到的小工具。备份存储过程的小工具。

背景

案例分析第三课-备份存储过程小工具
前一段时间由于项目组服务器崩了,导致测试环境数据库无了,脚本也没了,之前备份在数据库表数据中的脚本也都没了,并且没法恢复了。所以就想着可以将脚本备份到本地电脑上了啊,借用工具(PLSQL Developer)来备份啊,但是用过这个工具的人可能清楚,备份的话可能需要以下几步:
1.选择【工具】
2.选择【导出用户对象】
3.选择需要导出的存储过程
4.选择需要导出的文件路径
5.点击导出

也不是说麻烦吧,可能需要花费一点时间,所以就在想开发一个小工具,可以用来备份存储过程,稍微简单一丢丢也行。

思路

首先构思一下界面,因为需要登录数据库,所以需要用户名,口令,数据库实例,然后选择路径,以及开始备份的按钮。
根据大概的构思,大概界面分析如图所示:

代码及解析

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

import tkintermenuwin = tkinter.Tk()
menuwin.title('QfTool')screenwidth = menuwin.winfo_screenwidth()
screenheight = menuwin.winfo_screenheight()
width = 315
height = 280
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')#存储过程保存路径
save_path = ''# 界面一直显示
menuwin.mainloop()

运行结果如图:

2.给各个按钮添加对应的功能:
1)【路径】选择需要备份的路径,代码如下:

def selectPath():global save_path save_path = askdirectory() #选择的路径就是文件保存的路径v_path.set(save_path)  #并将选择的路径显示在备份存过上面一行

2)【重置】清除显示的路径,其实这个按钮可有可无,代码如下:

def textjs():global save_pathsave_path=''  v_path.set('')

3)【备份存过】从数据库中查询出存储过程,然后将查询的结果存储到列表中去,再讲列表中的结果一一写入文件中并保存,就得到我们最后备份好的存储过程了:

def get_proc(connect):# 连接数据库conn_text = connectconn = cx_Oracle.connect(conn_text)# 获取cursor()cursor = conn.cursor()# 使用cursor()操作查询sql = "SELECT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE = 'PROCEDURE'"result = cursor.execute(sql)proclist = result.fetchall()for i in proclist:procname = i[0]conn = cx_Oracle.connect(conn_text)cursor = conn.cursor()sql = "SELECT DBMS_METADATA.GET_DDL('PROCEDURE','" + procname + "') FROM DUAL"result = cursor.execute(sql)textlob = result.fetchall()pram = []for i in textlob:text = i[0].read()pram.append(text)write_text(procname, pram)cursor.close()# 关闭数据库连接conn.close()def write_text(procname, text):save_file = save_path + '\\' + procname + '.txt'file = open(save_file, 'w', encoding='utf-8')file.writelines(text)file.close()

3.将写好的代码打包成exe,执行exe,看运行结果。
1)准备运行前,如图所示:

2)运行后,如图所示:


备份完成,不选择路径的话,会默认存放在【E盘/当日日期(YYYYMMDD)/用户名】。

跋文

备份存储过程小工具只是一个简单的备份存过的小工具,后面也可以将建表语句啊什么的添加进去,或者可以保存输入的用户名口令数据库等,方便下次使用,都是有待优化升级的,大家也可以集思广益一起交流交流,提出宝贵的意见。

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

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

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

【Python的自学之路】(五):案例分析第三课相关推荐

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

    目录 序言 背景 思路 代码及解析 跋文 序言 小工具1.0版本,备份oracle存储过程的小工具上篇文章已经都了解完毕了,下面继续进行功能升级,2.0版本-表数据的导出功能. 背景 案例分析第四课- ...

  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. 计算机网络协议分析 第三课 PAP,CHAP,PPPoE

    计算机网络协议分析第三课 第二章 链路层技术 2.3.5 PPP认证 PAP认证 CHAP认证 2.4 PPPoE 第二章 链路层技术 2.3.5 PPP认证 PPP协议支持两种认证协议:PAP和CH ...

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

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

  9. 深度学习之LSTM案例分析(三)

    #背景 来自GitHub上<tensorflow_cookbook>[https://github.com/nfmcclure/tensorflow_cookbook/tree/maste ...

最新文章

  1. plasma桌面设置好的面板消失了_Ubuntu Studio 将用 KDE Plasma 桌面环境替换 Xfce | Linux 中国...
  2. jittor和pytorch生成网络对比之softmax_gan
  3. ArgoCD + KubeVela:以开发者为中心的 GitOps
  4. B02_NumPy数据属性(ndarray.ndim,ndarray.shape,ndarray.itemsize,ndarray.flags)
  5. git add * 提示warning: LF will be replaced by CRLF in 解决办法
  6. C#垃圾回收机制(GC)
  7. 进程的静止和活动状态
  8. 机器学习基础(四十一)—— KNN
  9. c语言银行排队系统链表,银行预约排队系统(数据结构问题)
  10. 『神器』如何免费下载百度文库付费资料?
  11. JAVA调起clearcase_Rational ClearCase和Rational ClearQuest对Java API的支持
  12. 中国GPS开发工具市场现状研究分析与发展前景预测报告(2022)
  13. SharePoint可上传编辑但不能删除的权限设置
  14. Contrastive Learning Rivals Masked Image Modeling in Fine-tuning via Feature Distillation
  15. ZYNQ 千兆以太网 学习
  16. Kubernetes调度器源码学习(三):Preempt抢占机制、调度失败与重试处理
  17. 利用python进行身份证号码大全_2分钟就能学会的3个函数,快速从身份证中提取出生日期、年龄...
  18. 高物实验报告计算机模拟高分子,高分子物理课程实验报告(.doc
  19. 计算机库网络不见了,在电脑中的库文件夹不见了的找回方法介绍
  20. Ubuntu双系统导致grub开机引导丢失的问题

热门文章

  1. 安装centos6.5 i686,安装vnc,配置中文界面
  2. Git的下载与安装(全)
  3. 2023 苹果cmsV10 动漫影视网站主题模板
  4. 重置表单元素file的方法(兼容ie8)
  5. js行背景变色、显示提示层的代码
  6. 机房重构之--数据库设计说明书
  7. 收银系统的设计与实现
  8. 介绍一位零基础学Python网络爬虫的工程师
  9. 产出估值超百亿的“国民种草机”,这两个80后不简单
  10. 【C语言】顺序表的创建