PyQt6实战3--sql查询器

本文介绍了一个基于PyQt6的DBQuery应用,使用SQLite代替MySQL,提供SQL查询器功能,包括查询、写入操作,以及如何在Python中连接和管理SQLite数据库。
摘要由CSDN通过智能技术生成

由于mysql的驱动,qt不是默认带的,所以要使用mysql的话可以自行解决(答案在《PyQt6快速开发与实战》 第384页)。为了让大家顺利跑起来,我使用了sqlite,免mysql的安装

功能:

1.sql查询器,输入sql,点击查询

运行:

1.sqlite 安装教程 : https://doc.yonyoucloud.com/doc/wiki/project/sqlite/sqlite-installation.html

最新的版的压缩包,解压之后可以直接使用,不需要make过程,解压之后就有sqlite3可执行文件了

2.创建一个db后缀的文件,替换掉我的那个文件地址即可跑起来

刚开始表是空的,你需要先创建表,然后写入几条语句接口

初始化数据,先运行SqlQuery的main方法

3.执行DBQuery的main函数即可

4.先点击登录,会自定连接刚才配置的db文件,然后表那会显示table列表

运行效果

from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
from PyQt6.QtGui import *

import sys
import os

from SqlQuery import SqlQuery

import pathlib
path_top = pathlib.Path(__file__).parent.parent
if str(path_top) not in sys.path:
    sys.path.append(str(path_top))



class DBQuery(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        self.initAction()
        

    def initUI(self):

        self.setWindowTitle('DBQuery')
        self.setGeometry(200, 200, 800, 600)

        layout = QHBoxLayout()

        leftlayout = QVBoxLayout()
        self.login_btn = QPushButton("登录")
        leftlayout.addWidget(self.login_btn)
        sql_label = QLabel("数据库表:")
        self.table_list = QListWidget()
        self.table_list.addItems(["表1", "表2", "表3"])
        leftlayout.addWidget(sql_label)
        leftlayout.addWidget(self.table_list)
        layout.addLayout(leftlayout, stretch=1)

        
        rightTopLayout = QVBoxLayout()
        rightTopLayout.addWidget(QLabel("输入sql:"))
        self.sql = QTextEdit()
        rightTopLayout.addWidget(self.sql, stretch=2)
        self.queryLayout = QHBoxLayout()
        self.query_button = QPushButton("查询")
        self.queryLayout.addWidget(self.query_button)
        self.write_button = QPushButton("写入")
        self.queryLayout.addWidget(self.write_button)

        self.queryLayout.setAlignment(Qt.AlignmentFlag.AlignCenter)
        self.result_table = QTableView()
        rightTopLayout.addLayout(self.queryLayout)
        rightTopLayout.addWidget(self.result_table, stretch=4)

        layout.addLayout(rightTopLayout, stretch=3)
        self.setLayout(layout)

    def initAction(self):
        # 登录
        self.login_btn.clicked.connect(self.loginClicked)
        # 查询
        self.query_button.clicked.connect(self.queryClicked)
        # 写入
        self.write_button.clicked.connect(self.writeClicked)
        

    
    def loginClicked(self):
        self.dbquery = SqlQuery()
        self.dbquery.connect_db()
        self.table_list.clear()
        self.table_list.addItems(self.dbquery.get_tables())


    def queryClicked(self):
        sql = self.sql.toPlainText()
        if sql:
            if sql.startswith("select"):
                self.dbquery.query(sql)
                self.result_table.setModel(self.dbquery.queryModel)
                # self.result_table.show()
            else:
                QMessageBox.warning(self, "警告", "请输入select语句")
        else :
            QMessageBox.warning(self, "警告", "请输入sql")
        

    def writeClicked(self):
        sql = self.sql.toPlainText()
        if sql:
            if sql.startswith("select"):
                QMessageBox.warning(self, "警告", "select语句,请选择查询按钮")
            else:
                try:
                    self.dbquery.write(sql)
                    QMessageBox.information(self, "警告", "成功")
                except:
                    QMessageBox.warning(self, "警告", "写入失败")

        else :
            QMessageBox.warning(self, "警告", "请输入sql")





if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DBQuery()
    window.show()
    sys.exit(app.exec())
from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
from PyQt6.QtGui import *
from PyQt6.QtSql import *

'''
1.sqlite 安装教程 : https://doc.yonyoucloud.com/doc/wiki/project/sqlite/sqlite-installation.html
最新的版的压缩包,解压之后可以直接使用,不需要make过程,解压之后就有sqlite3可执行文件了

2.创建一个db后缀的文件,替换掉我的那个文件地址即可跑起来
'''
class SqlQuery():
    def __init__(self):
        pass

    def connect_db(self):
        db = QSqlDatabase.addDatabase("QSQLITE")
        db.setDatabaseName('/Users/zhaojun/develop/sqlit/dbquery.db')
        isOpen = db.open()
        if(isOpen):
            print("数据库连接成功")
            self.db = db
            self.writeModel = QSqlQuery(db=self.db)
            self.queryModel = QSqlQueryModel()
        else:
            print("数据库连接失败")
        return db
    
    def query(self, sql):
        self.queryModel.setQuery(sql)
    
    def write(self, sql):
        self.writeModel.exec(sql)
    
    def get_tables(self):
        return self.db.tables()

    def close_db(self):
        self.db.close()


if __name__ == "__main__":
    sqlQuery = SqlQuery()
    db = sqlQuery.connect_db()
    queryModel = QSqlQuery()
    queryModel.exec("create table people(id int primary key, name varchar(20), age int)")
    queryModel.exec("insert into people(id, name, age) values(1, 'zhaojun', 20)")
    queryModel.exec("insert into people(id, name, age) values(2, 'zhaojun2', 20)")
    queryModel.exec("insert into people(id, name, age) values(3, 'zhaojun3', 20)")
    queryModel.exec("select * from people")
    while queryModel.next():
        print(queryModel.value(0), queryModel.value(1), queryModel.value(2))
    
    sqlQuery.close_db()
    

代码地址

GitHub - chunlaiqingke/Tiny-Tool

公众号:

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值