【Python pyQt5 pySide6】交互MySQL数据在表格中展示【清空数据】【展示数据】【查询模糊数据】

自从大二学习了mysql之后,在mysql与python,java交互的连接池中,我觉得是时候做一个查询的python图形界面了,啊啊啊啊啊啊啊啊啊啊啊啊啊啊阿。

第一种(是【或】的闭包运算,查询编号,查询姓名互不干扰)

优点:适用于单一数据的查询,查询一个数据时,其他条件不会影响查询的数据

 

准备:python,python图形界面工具pycharm,python库:pymysql, pyside6(pyQt),mySQL数据库

第一步:准备数据库表(数据库表尽量规整,我这个数据库表试验太多了)

第二步:准备qtdesigner和ui文件,如果没有安装pyQt或者pySide6的同学,可以试试安装一下

第三步:创建一个SQL()类,用来写执行的方法(不含ui文件)

import pandas as pd
import pymysql as pm

con = pm.connect (
        host='localhost',
        port=3306,
        user='root',
        password='123456',
        database='flowers'
    )
cur = con.cursor ()
# 连接数据库--用户consumer表
class SQL:
    
   

    def select(self,tb):
        sql='select * from '+tb
        cur.execute(sql)
        return cur


    def select_consumer_no(self,no):
        # 查询编号
        # SELECT * FROM
        # consumer
        # WHERE
        # consumer_no like '%0096%'
        nos= '%'+str(no)+'%'
        sql='SELECT * FROM consumer WHERE consumer_no like %s'
        cur.execute (sql,nos)
        # print(cur.fetchall())
        return cur
    def select_consumer_name(self,name):
        nos = '%' + str (name) + '%'
        sql = 'SELECT * FROM consumer WHERE consumer_name like %s'
        cur.execute (sql, nos)
        # print (cur.fetchall ())
        return cur

    def select_consumer_phone(self,phone):
        nos = '%' + str (phone) + '%'
        sql = 'SELECT * FROM consumer WHERE consumer_phone like %s'
        cur.execute (sql, nos)
        # print (cur.fetchall ())
        return cur

    def select_consumer_address(self,add):
        nos = '%' + str (add) + '%'
        sql = 'SELECT * FROM consumer WHERE consumer_address like %s'
        cur.execute (sql, nos)
        # print (cur.fetchall ())
        return cur
    

第四步:创建py文件与SQL()交互

# 展示顾客的信息表
class Add():
    def __init__(self):
        self.ui = QUiLoader().load("../UI/xs.ui")
//这是按钮控件点击出现
        self.ui.sub.clicked.connect(self.setData)
        self.ui.clear.clicked.connect(self.clear)
        self.ui.select.clicked.connect(self.select)
        self.ui.select_2.clicked.connect (self.select2)
        self.ui.select_3.clicked.connect (self.select3)
        self.ui.select_4.clicked.connect (self.select4)
        # self.ui.ad.clicked.connect(self.add)
//表格名为tb
        self.tb=self.ui.tb
 
    def setData(self,sql):
        sc=True
        name = self.ui.name.text ()
        cur=SQL().select('consumer')
        rows = cur.fetchall ()
        row=cur.rowcount
        vol=len(rows[0])
        self.readBase (row, vol, rows)
        sc=False
       
    def readBase(self,row,vol,rows):
        self.tb.setRowCount (row)

        self.tb.setColumnCount (vol)

        for i in range (row):

            for j in range (vol):

                temp_data = rows[i][j]  # 临时记录,不能直接插入表格

                data = QTableWidgetItem (str (temp_data))  # 转换后可插入表格

                self.tb.setItem (i, j, data)



//清空数据的方法
    def clear(self):
        sc=True
//只需要设置表格属性行列数据均为0
        self.ui.tb.setRowCount(0)
        self.ui.tb.clearContents()
        sc=False

 



    def select(self):
        sc = True
        name = self.ui.name.text ()
        cur=SQL().select_consumer_name(str(name))
        rows = cur.fetchall()
        row = cur.rowcount
        vol = len (rows[0])
        self.readBase (row, vol, rows)
        sc = False
        

    def select2(self):
        sc = True
        no = self.ui.no.text ()
        cur=SQL().select_consumer_no(str(no))
        rows = cur.fetchall()
        row = cur.rowcount
        vol = len (rows[0])
        self.readBase (row, vol, rows)
        sc = False
        
    def select3(self):
        sc = True
        phone = self.ui.phone.text ()
        cur=SQL().select_consumer_phone(str(phone))
        rows = cur.fetchall()
        row = cur.rowcount
        vol = len (rows[0])
        self.readBase (row, vol, rows)
        sc = False
       
    def select4(self):
        sc = True
        add = self.ui.addr.text ()
        cur=SQL().select_consumer_address(str(add))
        rows = cur.fetchall()
        row = cur.rowcount
        vol = len (rows[0])
        self.readBase (row, vol, rows)
        sc = False
       

那到此处,关于第二种查询就结束了。

第二种(输入任意数据,都可以在数据库中进行模糊查询,【且】的关系闭包):

优点:可以查询满足多个条件的数据

第一步:创建ui文件(动态)

第二步:创建数据库表(就是上面那张数据库表的截图)

第三步:在我们创建的SQL类中加入一个函数 

    def sc(self,no,name,phone,add):
        nos1 = '%' + str (no) + '%'
        nos4 = '%' + str (add) + '%'
        nos3 = '%' + str (phone) + '%'
        nos2 = '%' + str (name) + '%'
        sql = 'SELECT * FROM consumer WHERE consumer_no like %s' +'' \
               ' and consumer_name like %s'+'' \
               'and consumer_phone like %s'+'' \
               'and consumer_address like %s'
        cur.execute (sql,[nos1,nos2,nos3,nos4])
        return cur

第三步:创建py文件,创造Acd类

class Acd():
    def __init__(self):
        self.ui = QUiLoader().load("../UI/sc.ui")
        self.ui.select.clicked.connect(self.select)
#表单控件名为tb
        self.tb = self.ui.tb
    def select(self):
        SC=True
        no = self.ui.no.text ()
        name = self.ui.name.text ()
        phone = self.ui.phone.text ()
        addr = self.ui.addr.text ()
#调用SQL()的sc()方法
        cur = SQL ().sc(no,name,phone,addr)
#获取游标,将数据库的数据写在表单控件中
        rows = cur.fetchall ()
        print(rows)
        row = cur.rowcount
        vol = len (rows[0])
#将表单的行列长度设置与数据库相同
        self.tb.setRowCount (row)
        self.tb.setColumnCount (vol)
#遍历,添加数据
        for i in range (row):
            for j in range (vol):
                temp_data = rows[i][j]  # 临时记录,不能直接插入表格
                data = QTableWidgetItem (str (temp_data))  # 转换后可插入表格
                self.tb.setItem (i, j, data)
        sc=False

那么,以上就是【或】【且】查询的类与方法了。

代码仅供参考,ui文件自己创造,数据库表也要自己做。加油哦,各位靓仔。

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要使用PythonMySQL连接器来连接MySQL数据库。你可以使用`pymysql`或`mysql-connector-python`等Python模块来连接MySQL数据库。 下面是一个使用`pymysql`模块连接MySQL数据库的示例代码: ```python import pymysql # 连接MySQL数据库 conn = pymysql.connect( host='localhost', user='root', password='password', db='database_name' ) # 创建游标对象 cursor = conn.cursor() # 执行SQL语句 cursor.execute('SELECT * FROM table_name') # 获取所有数据 data = cursor.fetchall() # 关闭游标和连接 cursor.close() conn.close() ``` 接下来,你需要在PyQt5界面创建一个列表控件,用于展示MySQL数据查询到的数据。你可以使用`QListWidget`类来创建一个列表控件。 下面是一个使用`QListWidget`类创建列表控件的示例代码: ```python from PyQt5.QtWidgets import QApplication, QListWidget, QListWidgetItem # 创建QListWidget对象 list_widget = QListWidget() # 添加数据到列表控件 for row in data: list_item = QListWidgetItem() list_item.setText(str(row)) list_widget.addItem(list_item) ``` 将以上两段代码结合起来,你就可以从MySQL数据读取数据,并在PyQt5界面的列表控件展示数据了。完整代码示例如下: ```python import pymysql from PyQt5.QtWidgets import QApplication, QListWidget, QListWidgetItem # 连接MySQL数据库 conn = pymysql.connect( host='localhost', user='root', password='password', db='database_name' ) # 创建游标对象 cursor = conn.cursor() # 执行SQL语句 cursor.execute('SELECT * FROM table_name') # 获取所有数据 data = cursor.fetchall() # 创建QListWidget对象 list_widget = QListWidget() # 添加数据到列表控件 for row in data: list_item = QListWidgetItem() list_item.setText(str(row)) list_widget.addItem(list_item) # 关闭游标和连接 cursor.close() conn.close() # 显示窗口 app = QApplication([]) list_widget.show() app.exec_() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值