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

序言

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

背景

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

思路

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

代码及解析

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

import tkinter

menuwin = 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_path
    save_path=''  
    v_path.set('')

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

def get_proc(connect):
    # 连接数据库
    conn_text = connect
    conn = 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搜索【前路漫漫】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值