python制作一个简单的gui 数据库查询界面


Posted in Python onNovember 19, 2020

一、准备工作:

1、安装mysql3.7,创建一个test数据库,创建student表,创建列:(列名看代码),创建几条数据

(以上工作直接用navicat for mysql工具完成)

二、代码:

import sys
import tkinter as tk
import mysql.connector as sql

#--------------------查询函数---------------------------
def sql_connect():
  listbox_show.delete(0,'end') #初始化清空显示区
  m = listbox_name.curselection()[0]
  print('m=',m)
  list_name = listbox_name.get(m)[0]
  varlue = entry_varlue.get()
  print('list_name=',list_name)
  print('var=',varlue)

  while list_name == 'Student_ID':
    sql_sr = "select * from Student where student.student_id = " + "'" + varlue +"'"
    print(sql_sr)
    break
  while list_name == 'Name':
    sql_sr = "select * from Student where student.name = " + "'" + varlue +"'"
    print(sql_sr)
    break

  while list_name == 'Age':
    sql_sr = "select * from Student where student.age = " + "'" + varlue +"'"
    print(sql_sr)
    break
  while list_name == 'Sex':
    sql_sr = "select * from Student where student.sex = " + "'" + varlue +"'"
    print(sql_sr)
    break
  while list_name == 'Class':
    sql_sr = "select * from Student where student.class = " + "'" + varlue +"'"
    print(sql_sr)
    break

  mydb = sql.connect(host='localhost',user='root',passwd='123456',database='test')
  mycursor = mydb.cursor()
  mycursor.execute(sql_sr)
  myresult = mycursor.fetchall()
  for x in myresult:
    print (x)
    listbox_show.insert('end',x)
#--------------------------------------------------------


#------------界面初始化时加载选项列表--------------------
sql_n = "SELECT COLUMN_NAME FROM information_schema.COLUMNS \
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'student'"
mydb = sql.connect(host='localhost',user='root',passwd='123456',database='test')
mycursor = mydb.cursor()
mycursor.execute(sql_n)
myresult = mycursor.fetchall()

#--------------------------------------------------------

#----------窗体部分--------------------------------------
entry_list_name = tk.Entry()
entry_list_name.pack()

listbox_name = tk.Listbox()
listbox_name.pack()
for i in myresult:
  listbox_name.insert('end',i) #加载选项列表

entry_varlue = tk.Entry()
entry_varlue.pack()

button_select = tk.Button(text = '查找',command = sql_connect)
button_select.pack()

listbox_show = tk.Listbox()
listbox_show.pack()


root.mainloop()
#--------------------------------------------------------

三、界面

python制作一个简单的gui 数据库查询界面

 好吧,是挺丑的,因为没调格式,将就吧。

四、总结

1、目的:自己这个菜鸟新手天天看基础教程觉得很抽象,各种运算结果只能打印在IDE窗口,不是我想象中的程序(有界面,有交互,有。。。总之很精彩),然后按教程的各种渐进学法感觉不太适合自己的风格,我喜欢有一个具体的东西,不断的添加功能,然后在添加的过程中碰到问题再寻求解决办法,在解决的过程中学习新知识,嗯,就是只学能用到的,很功利。。。然后就开始折腾这个小界面。

2、首先要有GUI界面就要用到GUI模块,本着方便原则就用python自带的tkinter(不用再折腾安装),一开始我想用所见即所得的方式,找到了一个可以拖放元件来生成界面的工具page python,这也是个基于tkinter的工具,后来发现生成的py文件对我这个菜鸟来说还是有点深奥了,而且关于page的教程全网只有一两个(无语,估计高手都不屑吧),然后就转而直接研究tkinter

3、先做好窗体部分的实现代码。

设计:按动按钮查询固定表里某一字段的某个匹配值的结果,显示在界面中。

元件:输入元件2个(1个字段,1个值),结果显示元件1个,按钮1个。

字段输入值直接获取表头列出选择,找不到下拉菜单,只能用listbox来做,界面初始化时就将表头读出列在listbox里。

匹配值输入使用entry输入框。

显示结果也是使用listbox。

交互动作使用按钮。

OK,视觉界面做好了,下面添加功能。

4、(字段输入值直接获取表头列出选择,找不到下拉菜单,只能用listbox来做,界面初始化时就将表头读出列在listbox里。)

要和mysql交互获取,需要登录数据库并实现查询。

我使用import mysql.connector模块来实现和mysql的通讯(python还有期它模块也能实现和mysql的通讯,当时为什么使用mysql.connector呢,我也记不清了,好像从哪个教程直接弄来用的,反正就是用了)

于是又去啃了sql的查询语句,这里还是挺齐全的https://www.runoob.com/sql/sql-select.html,不过我是没学全的,没办法,学渣只能用到哪学到哪。重点说一下,sql语句里的 + 号就是将前后的值串起来,可以理解为and。可以将字符和变量串起来。

5、接下来就是按钮动作的交互代码了,这是逻辑的重头戏。

逻辑:在列出的字段中选择一个要查询的字段,输入要匹配的值,点击按钮查询,将结果显示在显示区。

获取listbox的光标值,将它取出来,比对字段生成相应的sql查询语句,和mysql交互得到返回值集,逐条取出展示在显示区。

好了,大功告成,虽然看起来很丑,想让它变美女就要加滤镜咯(调tkinter格式)。

以上就是python制作一个简单的gui 数据库查询界面的详细内容,更多关于python gui数据库查询的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python实现决策树C4.5算法详解(在ID3基础上改进)
May 31 Python
Python 生成 -1~1 之间的随机数矩阵方法
Aug 04 Python
python中删除某个元素的方法解析
Nov 05 Python
Python性能分析工具Profile使用实例
Nov 19 Python
django序列化serializers过程解析
Dec 14 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
TensorFLow 不同大小图片的TFrecords存取实例
Jan 20 Python
解决django 向mysql中写入中文字符出错的问题
May 18 Python
使用Python构造hive insert语句说明
Jun 06 Python
弄清Pytorch显存的分配机制
Dec 10 Python
python turtle绘图命令及案例
Nov 23 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 Python
解决python3中os.popen()出错的问题
Nov 19 #Python
Python中return函数返回值实例用法
Nov 19 #Python
python 三种方法实现对Excel表格的读写
Nov 19 #Python
基于python模拟bfs和dfs代码实例
Nov 19 #Python
Python 多进程、多线程效率对比
Nov 19 #Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 #Python
Pytorch实验常用代码段汇总
Nov 19 #Python
You might like
S900/ ETON E1-XM 收音机
2021/03/02 无线电
PHP4实际应用经验篇(9)
2006/10/09 PHP
PHP 已经成熟
2006/12/04 PHP
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
php连接mssql数据库的几种方法
2013/02/21 PHP
php实现36进制与10进制转换功能示例
2017/01/10 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
Python求解正态分布置信区间教程
2019/11/20 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
python中加背景音乐如何操作
2020/07/19 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
2013/01/30 HTML / CSS
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
解释DataSet(ds) 和 ds as DataSet 的含义
2014/07/27 面试题
学术诚信承诺书
2014/05/26 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
暑期实践个人总结
2015/03/06 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
药房管理制度范本
2015/08/06 职场文书
作文之亲情600字
2019/09/23 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA