PyQt5

  • 数据库建表 + SQL 语句
  • Qt designer 制作界面
  • 连接 MySQL 相关知识
  • 查询并获取数据库的数据
  • 运行效果

数据库建表 + SQL 语句



建立一个数据库:test

建立一张数据表:tab,SQL 语句如下:

SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for tab
-- ----------------------------
DROP TABLE IF EXISTS `tab`;
CREATE TABLE `tab` (`id` int(11) NOT NULL,`name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of tab
-- ----------------------------
INSERT INTO `tab` VALUES ('172101', '小明');
INSERT INTO `tab` VALUES ('172102', '小红');
INSERT INTO `tab` VALUES ('172103', '小黄');
INSERT INTO `tab` VALUES ('172104', '小黑');
INSERT INTO `tab` VALUES ('172105', '小三');
INSERT INTO `tab` VALUES ('172106', '小白');

Qt designer 制作界面

Qt designer 基本使用可以参考:【PyQt5】使用 designer 开发 python GUI 界面

我们随意做一个有 tableWidget 的界面保存为 hello.ui 并转为 hello.py:(代码下面有)

hello.ui 界面文件转为的 hello.py 代码如下:

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'hello.ui'
#
# Created by: PyQt5 UI code generator 5.15.0
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(316, 372)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)self.tableWidget.setGeometry(QtCore.QRect(11, 11, 301, 271))self.tableWidget.setObjectName("tableWidget")self.tableWidget.setColumnCount(2)self.tableWidget.setRowCount(9)item = QtWidgets.QTableWidgetItem()self.tableWidget.setVerticalHeaderItem(0, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setVerticalHeaderItem(1, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setVerticalHeaderItem(2, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setVerticalHeaderItem(3, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setVerticalHeaderItem(4, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setVerticalHeaderItem(5, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setVerticalHeaderItem(6, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setVerticalHeaderItem(7, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setVerticalHeaderItem(8, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(0, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(1, item)item = QtWidgets.QTableWidgetItem()item.setTextAlignment(QtCore.Qt.AlignCenter)self.tableWidget.setItem(0, 0, item)self.button_read = QtWidgets.QPushButton(self.centralwidget)self.button_read.setGeometry(QtCore.QRect(90, 300, 121, 41))self.button_read.setObjectName("button_read")MainWindow.setCentralWidget(self.centralwidget)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "tableDemo"))item = self.tableWidget.verticalHeaderItem(0)item.setText(_translate("MainWindow", "1"))item = self.tableWidget.verticalHeaderItem(1)item.setText(_translate("MainWindow", "2"))item = self.tableWidget.verticalHeaderItem(2)item.setText(_translate("MainWindow", "3"))item = self.tableWidget.verticalHeaderItem(3)item.setText(_translate("MainWindow", "4"))item = self.tableWidget.verticalHeaderItem(4)item.setText(_translate("MainWindow", "5"))item = self.tableWidget.verticalHeaderItem(5)item.setText(_translate("MainWindow", "6"))item = self.tableWidget.verticalHeaderItem(6)item.setText(_translate("MainWindow", "7"))item = self.tableWidget.verticalHeaderItem(7)item.setText(_translate("MainWindow", "8"))item = self.tableWidget.verticalHeaderItem(8)item.setText(_translate("MainWindow", "9"))item = self.tableWidget.horizontalHeaderItem(0)item.setText(_translate("MainWindow", "ID"))item = self.tableWidget.horizontalHeaderItem(1)item.setText(_translate("MainWindow", "姓名"))__sortingEnabled = self.tableWidget.isSortingEnabled()self.tableWidget.setSortingEnabled(False)self.tableWidget.setSortingEnabled(__sortingEnabled)self.button_read.setText(_translate("MainWindow", "读取"))

连接 MySQL 相关知识

Python 连接 MySQL 请看这个:【Python】PyMySQL 连接 MySQL数据库

查询并获取数据库的数据

由于我们界面与逻辑分离,界面代码前面已经有了,现在要写逻辑代码;
新建一个 main.py,然后写入下面代码,即可在 tableWidget 中展示数据库中的数据。

主要了解以下几个知识点:

  • 连接 mysql 并 查询数据库,cur.fetchall() 返回的是二维元组
#数据库连接对象
conn = pymysql.connect(host='localhost', port=3306, user='root', password="1234", db="test")
# 游标对象
cur = conn.cursor()
# 查询的sql语句
sql = "SELECT * FROM tab"
cur.execute(sql)
# 获取查询到的数据, 是以二维元组的形式存储的, 所以读取需要使用 data[i][j] 下标定位
data = cur.fetchall()
# 打印测试
print(data)
# print(data[0][1]) # 打印第1行第2个数据, 也就是小明
  • 遍历二维元组并将数据显示到表格上:
# 遍历二维元组, 将 id 和 name 显示到界面表格上
x = 0
for i in data:y = 0for j in i:self.tableWidget.setItem(x, y, QtWidgets.QTableWidgetItem(str(data[x][y])))y = y + 1x = x + 1

完整代码:

import sys
from PyQt5 import QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QApplication, QMainWindow, QHeaderViewfrom hello import Ui_MainWindowimport pymysqlclass MyMainWindow(QMainWindow, Ui_MainWindow):def __init__(self):super(MyMainWindow, self).__init__()self.setupUi(self)# 【读取】功能self.button_read.clicked.connect(self.read)# 【读取】按钮功能def read(self):# 数据库连接对象conn = pymysql.connect(host='localhost', port=3306, user='root', password="1234", db="test")# 游标对象cur = conn.cursor()# 查询的sql语句sql = "SELECT * FROM tab"cur.execute(sql)# 获取查询到的数据, 是以二维元组的形式存储的, 所以读取需要使用 data[i][j] 下标定位data = cur.fetchall()# 打印测试print(data)# print(data[0][1]) # 打印第1行第2个数据, 也就是小明# 遍历二维元组, 将 id 和 name 显示到界面表格上x = 0for i in data:y = 0for j in i:self.tableWidget.setItem(x, y, QtWidgets.QTableWidgetItem(str(data[x][y])))y = y + 1x = x + 1cur.close()conn.close()if __name__ == "__main__":QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)app = QApplication(sys.argv)win = MyMainWindow()win.show()sys.exit(app.exec())

运行效果

【PyQt5】连接 mysql 查询数据 并显示在 tableWidget 表格相关推荐

  1. 使用Connector / Python连接MySQL/查询数据

    使用Connector / Python连接MySQL connect()构造函数创建到MySQL服务器的连接并返回一个 MySQLConnection对象 在python中有以下几种方法可以连接到M ...

  2. python连接mysql查询一个数据_使用Connector / Python连接MySQL/查询数据

    使用Connector / Python连接MySQL connect()构造函数创建到MySQL服务器的连接并返回一个 MySQLConnection对象 在python中有以下几种方法可以连接到M ...

  3. mysql 查询数据,显示行号

    转自:Mysql查询显示行号,实现类似Oracle数据库的ROWNUM() - 简书 SELECT( @rownum := @rownum + 1 ) AS rownum,`animal`.* FRO ...

  4. myeclipse读取mysql表中数据_在myeclipse中连接mysql查询数据

    package com.ynu.www; import java.sql.*; public class ComInfluence { /** * @param args */ // 成功加载后,会将 ...

  5. php mysql 中文_PHP连接MySQL查询结果中文显示乱码解决方法

    我们首先假设数据库中采用的编码为UTF-8 这时我们在PHP页面中应当首先添加 此处charset的值utf-8必须与文件保存时的编码类型一样 之后在数据库查询前添加 mysql_query(&quo ...

  6. php mysql 无法查询中文名字_PHP连接MySQL查询中文时显示Notice: Trying to get property of non-object...

    1.保证MySQL和PHP的编码一致 MySQL 修改整个数据库的编码格式 注意:如果数据不重要的话,可以直接使用更改数据库的编码格式,再重新建表即可.(此例中的数据库是test) alter dat ...

  7. mysql连接查询_.net core 里连接mysql查询数据的方法

    1. 创建新项目-ASP.NET Core Web 应用程序 2. 3. 右键项目-管理 NuGet 程序包(N)... 4. 搜索 Pomelo.EntityFrameworkCore.MySql ...

  8. python连接mysql查询数据返回字典格式

    import MySQLdb import MySQLdb.cursors  conn = MySQLdb.connec('localhost','root','test456','db_test', ...

  9. (二)QT5.14.2连接MySQL并使用QtableView显示数据表内容

    系列文章目录 第一章:(一)QT5.14.2+MSVC2017(32位/64位)+MySQL连接 第二章:(二)QT5.14.2连接MySQL并使用QtableView显示数据表内容 文章目录 系列文 ...

最新文章

  1. 你绝对能懂的“机器学习”(一)
  2. 快乐数(双指针,哈希表)
  3. Python面向对象(三)
  4. oracle10 ins tcx,安装Oracle10g遭遇ins_ctx.mk问题-Oracle
  5. Enum,Int,String的互相转换 枚举转换
  6. 要想挣大钱,就要懂一个基本
  7. Tensorflow API + OpenCV (Real Time Object Detection)
  8. SHFileOperation复制文件夹、文件用法
  9. FPGA丨RGB转Ycbcr算法实现
  10. 谍影追踪:全球首例UEFI_BIOS木马分析
  11. 鼠标图标怎么自定义_苹果ios14怎么自定义图标 图标位置自由排列换风格教程
  12. 《创业,我们创什么》---- 读书笔记
  13. 电子仪表系统显示管理计算机,综合电子仪表系统.ppt
  14. Shell攻关之条件判断与流程控制
  15. EOS智能合约开发系列(九): 高级权限设置
  16. 9.2 常用缩写汇总表
  17. R语言绘图patchwork拼图详解快速实现组合图拼接
  18. android百度地图画圆,使用百度地图Api,在地图上画圆形区域
  19. 人总要有奋斗目标的坚持
  20. Python使用百度OCR接口进行验证码图像识别

热门文章

  1. 没有别家钱多,没有别家人多,小型培训机构招生怎么做?
  2. 有没有发现4G网速越来越慢了?
  3. 现在装修还有必要铺设网线吗?
  4. C语言手写快排算法,两个值时也可以使用哦!
  5. druid连接池mysql自动关闭_探究Druid连接池“违反协议”异常
  6. 游标sql server_SQL Server游标性能问题
  7. 预编译sql查询语句_频繁查询重新编译– SQL查询性能杀手–检测
  8. jpa 查询编写sql_学习编写基本SQL查询
  9. Assembly generation failed Referenced assembly ‘xxx’ does not have a strong name
  10. 线程同步 -事件Event、临界区对象CriticalSection