tkinter+pymysql实现gui数据库查询功能

首先引用tkinter和pymysql库;

import tkinter
import pymysql

构造一个格式化时间戳的类

#遇到日期特殊处理
class ComplexEncoder(json.JSONEncoder):
    def default(self,obj):
        if isinstance(obj,datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(obj,date):
            return obj.strftime('%Y-%m-%d')
        else:
            return json.JSONEncoder.default(self,obj)

定义一个函数,实现sql查询的功能,使用entry和combobox获取用户的输入,使用open函数将查询结果导出并存储到D盘;

#定义查询函数
def interface_table_cx_sql():
    try:
        db = pymysql.connect(host=ip_down_menu.get(),port=int(port_down_menu.get()),user=user_down_menu.get(),password=pw_down_menu.get(),database=db_down_menu.get(), charset='utf8' )
        tkinter.messagebox.showinfo('消息框', '数据库连接成功', parent=win)
    except:
        tkinter.messagebox.showerror('消息框', 'error 数据库连接失败', parent=win)
    cursor = db.cursor()    #创建一个游标

    sql = "select * from " + interface_table_down_menu.get() 

    try:
    # 执行SQL语句
        cursor.execute(sql)
        results = cursor.fetchall()
        cols = cursor.description
        data = format_data(results,cols)
        cursor.close()
        db.close()
        data_json=json.dumps(data,cls=ComplexEncoder,indent=1,ensure_ascii=False)
        with open('D:/接口库全表查询结果.txt','w') as file:
            file.write(data_json)
        tkinter.messagebox.showinfo('消息框', '数据已导入D盘 接口库全表查询结果.txt', parent=win)
    except:
        tkinter.messagebox.showerror('消息框', '错误!!请检查输入信息', parent=win)

定义一个format_data函数将导出的数据格式化为json格式;

def format_data(results,cols):
    keys = []
    for column in cols:
        keys.append(column[0])
    key_number = len(keys)

    json_data = []
    for row in results:
        item = dict()
        for q in range(key_number):
            item[keys[q]] = row[q]
        json_data.append(item)

    return json_data

以下为主程序:

win = tkinter.Tk()
win.title(test')
# 设置窗口大小
winWidth = 800
winHeight = 600

# 获取屏幕分辨率
screenWidth = win.winfo_screenwidth()
screenHeight = win.winfo_screenheight()
 
x = int((screenWidth - winWidth) / 2)
y = int((screenHeight - winHeight) / 2)

# 设置窗口初始位置在屏幕居中
win.geometry("800x600")
# 设置窗口图标
win.iconbitmap("D:/ztshouhou for mysql/image/34.ico")
#p1 = PhotoImage(file = 'D:/project/34.jpg')
#win.iconphoto(False, '34.jpg') 
# 设置窗口宽高固定
win.resizable(0, 0)
#创建一个菜单项,类似于导航栏
menubar = Menu(win)
#提示1
tishi1 = Label(win,text = '数据库IP和端口号',font = 16)
tishi1.grid(row=0)
'''
下拉菜单
'''
down_menu_ip = tkinter.StringVar()    #创建变量,便于取值
down_menu_port = tkinter.StringVar()    #创建变量,便于取值
down_menu_user = tkinter.StringVar()    #创建变量,便于取值
down_menu_pw = tkinter.StringVar()    #创建变量,便于取值
down_menu_db = tkinter.StringVar()    #创建变量,便于取值
down_menu_table = tkinter.StringVar()    #创建变量,便于取值
down_menu_interface_table = tkinter.StringVar()    #创建变量,便于取值
 
ip_down_menu = ttk.Combobox(win, textvariable=down_menu_ip)     # #创建下拉菜单
ip_down_menu.grid(row=1,column=0)     # #将下拉菜单绑定到窗体
ip_file = open("D:/ztshouhou for mysql/ip.config",'r+')
for x in ip_file:
    ip_down_menu["value"] = x 
ip_file.close()
ip_down_menu.current(0)    # #设定下拉菜单的默认值为第1个,即********

port_down_menu = ttk.Combobox(win, textvariable=down_menu_port)     # #创建下拉菜单
port_down_menu.grid(row=2,column=0)     # #将下拉菜单绑定到窗体
port_file = open("D:/ztshouhou for mysql/port.config",'r+')
for x in port_file:
    port_down_menu["value"] = x 
port_file.close()
port_down_menu.current(0)    # #设定下拉菜单的默认值为第1个,即********

user_down_menu = ttk.Combobox(win, textvariable=down_menu_user)     # #创建下拉菜单
user_down_menu.grid(row=4,column=0)     # #将下拉菜单绑定到窗体
user_file = open("D:/ztshouhou for mysql/user.config",'r+')
for x in user_file:
    user_down_menu["value"] = x 
user_file.close()
user_down_menu.current(0)    # #设定下拉菜单的默认值为第1个,即********

pw_down_menu = ttk.Combobox(win, textvariable=down_menu_pw)     # #创建下拉菜单
pw_down_menu.grid(row=5,column=0)     # #将下拉菜单绑定到窗体
pw_down_menu["value"] = ('**********************','11111111')    # #给下拉菜单设定值
pw_down_menu.current(0)    # #设定下拉菜单的默认值为第1个,即********

db_down_menu = ttk.Combobox(win, textvariable=down_menu_db)     # #创建下拉菜单
db_down_menu.grid(row=7,column=0)     # #将下拉菜单绑定到窗体
db_file = open("D:/ztshouhou for mysql/db.config",'r+')
for x in db_file:
    db_down_menu["value"] = x 
db_file.close()
db_down_menu.current(0)    # #设定下拉菜单的默认值为第1个,即********

table_down_menu = ttk.Combobox(win, textvariable=down_menu_table)     # #创建下拉菜单
table_down_menu.grid(row=7,column=1)     # #将下拉菜单绑定到窗体
table_file = open("D:/ztshouhou for mysql/table.config",'r+')
for x in table_file:
    table_down_menu["value"] = x
table_file.close()
table_down_menu.current(0)    # #设定下拉菜单的默认值为第1个,即null

interface_table_down_menu = ttk.Combobox(win, textvariable=down_menu_interface_table)     # #创建下拉菜单
interface_table_down_menu.grid(row=7,column=2)     # #将下拉菜单绑定到窗体
interface_table_file = open("D:/ztshouhou for mysql/interface_table.config",'r+')
for x in interface_table_file:
    interface_table_down_menu["value"] = x
interface_table_file.close()
interface_table_down_menu.current(0)    # #设定下拉菜单的默认值为第1个,即null
'''









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值