【数据库实验】实验三 学习面向对象语言与SQL SEREVR数据库的连接方法及嵌入式SQL语言查询编程(已完成)

参考

该文章介绍了如何使用sqlite建立一个支持增删的可视化程序。注意头文件要添加上QApplication
如何在PyQt5中对数据库进行操作?

这篇文章介绍了与MySQL数据库的连接。步骤详细易懂。注意安装mysql-connector-python这个library。
Python Tutorial – Working with MySQL Database in Python
安装mysql-connector-python

ctrl键+函数->查到函数声明

PyQt5系列教程(64):PyQt5与数据库互联的小例子4

一、实验目的

  1. 本次实验的主要目的是主高级语句的使用,学习主高级语言与数据库的连接方法与编程技巧。
  2. 嵌入式SQL语言与主语言的联合编程。

二、实验要求

1.要求学生独立完成实验内容,画出E-R图及程序功能图;
2.按照实验步骤完成实验后,撰写报告内容,并对操作结果进行截图,写出主要关键程序代码。

三、实验内容及实验结果与主要代码

1.学习主语言与数据库的连接方法,写出数据库的连接语句。

2.采用嵌入SQL语言用游标实现如下界面功能的查询。学会使用嵌入SQL对数据库进行单表精确查询、模糊查询的方法

建立学生表:S(SNO,SNAME,SSEX,SAGE,SADDR)

在这里插入图片描述

分析:一个,一个按钮。按钮触发查询函数(查询来源于框内的汉字),结果显示在表格中

(一)画出E-R图及程序功能图

(二)功能实现界面图及主要程序代码(要有注释)

QtSQL库学习

QSqlDatabase Class

QSqlDatabase 类提供了通过连接访问数据库的接口。 QSqlDatabase 的一个实例表示连接。该连接通过从QSqlDriver 派生的受支持的数据库驱动程序之一提供对数据库的访问。或者,您可以从QSqlDriver 继承您自己的数据库驱动程序。有关详细信息,请参阅如何编写自己的数据库驱动程序。 通过调用静态 addDatabase() 函数之一创建连接(即 QSqlDatabase 的实例),您可以在其中指定要使用的驱动程序或驱动程序类型(取决于数据库类型)和连接名称。连接通过它自己的名称来识别,而不是通过它连接到的数据库的名称来识别。一个数据库可以有多个连接。 QSqlDatabase 还支持默认连接的概念,即未命名连接。要创建默认连接,请不要在调用 addDatabase()时传递连接名称参数。随后,如果您在未指定连接名称的情况下调用任何静态成员函数,则将假定默认连接。以下代码段显示了如何创建和打开到 PostgreSQL 数据库的默认连接:

    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("acidalia");
    db.setDatabaseName("customdb");
    db.setUserName("mojito");
    db.setPassword("J0a1m8");
    bool ok = db.open();

QSqlTableModel Class

QSqlTableModel 是一个高级接口,用于从单个表中读取和写入数据库记录。它建立在较低级别的 QSqlQuery 之上,可用于提供数据以查看 QTableView 等类。例如:

    QSqlTableModel *model = new QSqlTableModel;
    model->setTable("employee");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->select();
    model->setHeaderData(0, Qt::Horizontal, tr("Name"));
    model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

    QTableView *view = new QTableView;
    view->setModel(model);
    view->hideColumn(0); // don't show the ID
    view->show();

三个数据库都创建成功了,但是看不到数据。本质上是因为数据库连接失败了。实际上并没有连接上数据库(db.open()函数返回false)。
在这里插入图片描述

后端代码mysql-connection连接库函数

安装mysql-connector-python

pip install mysql-connector-python

源程序

这篇文章介绍了与MySQL数据库的连接。步骤详细易懂。注意安装mysql-connector-python这个library。

Python Tutorial – Working with MySQL Database in Python

访问github获取完整代码

database_python

注意在运行前要启动MySQL服务

在这里插入图片描述

createdb.py

import mysql.connector as mc
try:
    mydb = mc.connect(

        host = "localhost",
        user= "root",
        password =""
    )
    dbname = input("Please Enter Database Name : ")
    cursor = mydb.cursor()
    cursor.execute("CREATE DATABASE {} ".format(dbname))
    print("Database Created ")
except mc.Error as e:
    print("Database creation failed")

在这里插入图片描述
注意一定要使用mysql的用户名和密码,才能认证成功并登录。
我本地的是root 123456
然后我们到phpmyadmin里面看到了pythondb这个数据库。
在这里插入图片描述

dbconnection.py

在这里插入图片描述

createtbl.py

在create table的过程中,遇到了好几次false。修改了多次语句中的大小写,终于成功(PRIMARY KEYAUTO_INCREMENTDEFAULTCHARSET)

mycursor.execute("create table users(id int NOT NULL"
                 " AUTO_INCREMENT,email varchar(100),"
                 "password varchar(100),"
                 "PRIMARY KEY (id))AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")

在这里插入图片描述

在这里插入图片描述

insert.py

在这里插入图片描述

在这里插入图片描述

selectdata.py

在这里插入图片描述

updatingdata.py

在这里插入图片描述

deletedata.py

在这里插入图片描述

结合前端

首先我们左边布局的是一个表。
右边一个输入框,右边下面是一个查询按钮。

PyQt5 QtSQL 编程数据库

经如下的test_connection.py程序测试,驱动存在问题。Driver not loaded

from PyQt5.QtSql import QSqlQuery, QSqlDatabase
from PyQt5.QtWidgets import QApplication
import sys

app = QApplication(sys.argv)

try:
    db = QSqlDatabase.addDatabase('QMYSQL')
    db.setHostName('127.0.0.1')
    db.setPort(3306)
    db.setDatabaseName('cat')
    db.setUserName('root')
    db.setPassword('password')
    if db.open():
        print("打开啦")
    else:
        print(db.lastError().text())
except:
    print("try error!")

在这里插入图片描述

Driver not loaded解决(未解决,已放弃QMYSQL,使用QSQLITE)

安装完整MySQL,部署在3307端口

根据菜鸟教程:Windows10 MYSQL Installer 安装,配置了正牌的mysql。并成功运行,之后就用3307端口和root用户进行连接。
在这里插入图片描述

查看支持的服务

PyQt5使用QSqlDatabase类连接Mysql的坑:QMYSQL driver not loaded

from PyQt5.QtSql import QSqlDatabase
print(list(map(str, QSqlDatabase.drivers())))

在这里插入图片描述
并配置解释器为刚刚下载的解释器。
在这里插入图片描述

可以看到已经成功输入出QMYSQL
但依旧无法驱动

我的python是32位的,将mysql目录下的32位的libmysql.dll复制到qt/bin目录下,并没有效果。在网上查了许多方法也都没用。
看了其他文章说使用libmysql.dll去重新编译对应版本的qsqlmysqld.dll qsqlmysql.dll。网上的教程大都是使用qt。在pyqt中怎么编译。小白在此真心求助大佬帮助

崩溃了,不整了,不用QMYSQL驱动了,换为简单的QSQLITE驱动。一次就成功。
在这里插入图片描述
在这里插入图片描述

# coding:utf-8
import pymysql
from PyQt5 import QtGui,QtCore,QtWidgets,QtSql
from PyQt5.QtWidgets import QApplication,QMessageBox
import sys
class MainUi(QtWidgets.QMainWindow):

    def __init__(self):
        super().__init__()
        self.initUi()
    def create_db(self):
        try:
            # 调用输入框获取数据库名称
            db_text,db_action = QtWidgets.QInputDialog.getText(self,'数据库名称','请输入数据库名称',QtWidgets.QLineEdit.Normal)
            if (db_text.replace(' ','') != '') and (db_action is True):
                print(db_text)
                self.db_name = db_text
                # 添加一个mysql数据库连接并打开
                db = QtSql.QSqlDatabase.addDatabase('QSQLITE')#创建Mysql数据库,可自定义
                db.setDatabaseName('{}.sqlite'.format(db_text))#设置数据库名称
                # db.setHostName("127.0.0.1")#可以有多个连接到同一个数据库,也就是说连接名不唯一
                # db.setUserName('tom')#定义用户名
                # db.setPassword('tom@123')
                if (db.open()):
                    msgBox1=QMessageBox()
                    msgBox1.setText("创建数据库成功")
                    msgBox1.exec()
                else:
                    msgBox2 = QMessageBox()
                    msgBox2.setText("创建数据库失败")
                    msgBox2.exec()
                #// success!

                # 实例化一个查询对象
                query = QtSql.QSqlQuery()
                # 创建一个数据库表
                if(query.exec_("CREATE TABLE stu(sno int NOT NULL,sname varchar(12),ssex varchar(3),sage int,saddr char(12),PRIMARY KEY (sno))")):
                    print("create table stu ok!")
                    # 插入三条数据
                    query.exec_("INSERT INTO stu VALUES (95001,'王明','男',19,'北京')")
                    query.exec_("INSERT INTO stu VALUES (95002,'小华','男',21,'天津')")
                    query.exec_("INSERT INTO stu VALUES (95003,'小红','女',19,'威海')")
                if(query.exec_("CREATE TABLE stu(sno INT NOT NULL,sname VARCHAR(12),ssex VARCHAR(3),sage INT,saddr VARCHAR(12),PRIMARY KEY(sno))")):
                    pass
                else:
                    print(query.lastError().text())
        except Exception as e:
            print(e)

    def view_data(self):
        # 实例化一个可编辑数据模型
        self.model = QtSql.QSqlTableModel()#创建一个空的 QSqlTableModel 并将父级设置为父级,将数据库连接设置为 db。如果 db 无效,则将使用默认数据库连接。
        self.table_widget.setModel(self.model)

        self.model.setTable('stu') #模型操作的数据库表设置为stu。不从表中选择数据,而是获取其字段信息
        self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange) # 允许字段更改
        self.model.select() # 返回所有数据
        # 设置表格头
        self.model.setHeaderData(0,QtCore.Qt.Horizontal,'学号')
        self.model.setHeaderData(1,QtCore.Qt.Horizontal, '姓名')
        self.model.setHeaderData(2,QtCore.Qt.Horizontal, '性别')
        self.model.setHeaderData(3,QtCore.Qt.Horizontal,'年龄')
        self.model.setHeaderData(4,QtCore.Qt.Horizontal,'家庭地址')


    # 初始化UI界面
    def initUi(self):
        # 设置窗口标题
        self.setWindowTitle("数据库实验三")
        # 设置窗口大小
        self.resize(600,400)

        # 创建一个窗口部件
        self.widget = QtWidgets.QWidget()
        # 创建一个网格布局
        self.grid_layout = QtWidgets.QGridLayout()
        # 设置窗口部件的布局为网格布局
        self.widget.setLayout(self.grid_layout)

        # 创建一个按钮组
        self.group_box = QtWidgets.QGroupBox('功能按钮')
        self.group_box_layout = QtWidgets.QVBoxLayout()
        self.group_box.setLayout(self.group_box_layout)
        # 创建一个表格部件
        self.table_widget = QtWidgets.QTableView()
        # 将上述两个部件添加到网格布局中
        self.grid_layout.addWidget(self.table_widget,0,0)#放置表格位置在0
        self.grid_layout.addWidget(self.group_box,0,1)#放置按钮位置在1

        # 创建按钮组的按钮
        self.b_create_db = QtWidgets.QPushButton("创建数据库")
        self.b_create_db.clicked.connect(self.create_db)
        self.b_view_data = QtWidgets.QPushButton("浏览数据")
        self.b_view_data.clicked.connect(self.view_data())
        # self.b_add_row = QtWidgets.QPushButton("添加一行")
        # self.b_delete_row = QtWidgets.QPushButton("删除一行")
        self.b_close = QtWidgets.QPushButton("退出")
        self.b_close.clicked.connect(self.close)
        # 添加按钮到按钮组中
        self.group_box_layout.addWidget(self.b_create_db)
        self.group_box_layout.addWidget(self.b_view_data)
        # self.group_box_layout.addWidget(self.b_add_row)
        # self.group_box_layout.addWidget(self.b_delete_row)
        self.group_box_layout.addWidget(self.b_close)

        # 设置UI界面的核心部件
        self.setCentralWidget(self.widget)

    # 添加一行数据行
    def add_row_data(self):
        # 如果存在实例化的数据模型对象
        if self.model:
            self.model.insertRows(self.model.rowCount(), 1)
        else:
            self.create_db()

    # 删除一行数据
    def del_row_data(self):
        if self.model:
            self.model.removeRow(self.table_widget.currentIndex().row())
        else:
            self.create_db()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    gui = MainUi()
    gui.show()
    sys.exit(app.exec_())

注意:本程序中浏览数据函数所绑定的数据库继承于父类,所以只有在创建数据库按钮执行完成后,浏览数据按钮才能显示出结果。
在这里插入图片描述

针对实验的补充(输入框,查询按钮)

from PyQt5.QtWidgets import QLineEdit, QWidget

简陋版(窗格显示有问题)

关键显示代码

QListWidget不能setModel,QListView可以。
同样的QTableWidget不能设置setModel,QTbaleView可以
因为QTableView是基于MVC模式,数据与显示分离,所以要设置数据库,setmodule
MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
**加粗样式**

self.model = QtSql.QSqlQueryModel()  # 创建一个空的 QSqlTableModel 并将父级设置为父级,将数据库连接设置为 db。如果 db 无效,则将使用默认数据库连接。
self.table_view = QtWidgets.QTableView()
self.model.setHeaderData(0, QtCore.Qt.Horizontal, '学号')
sql = "SELECT * FROM S WHERE saddr ='%s'" %search
self.model.setQuery(sql)
self.table_view.setModel(self.model)#一定要写在所有设置完之后
self.table_view.show()
# coding:utf-8
import pymysql, sys
from PyQt5 import QtCore, QtWidgets, QtSql
from PyQt5.QtWidgets import QApplication, QMessageBox, QPushButton


class MainUi(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUi()

    def search_data(self):
        # 调用输入框获取数据库名称
        db_text, db_action = QtWidgets.QInputDialog.getText(self, '数据库名称', '请输入数据库名称', QtWidgets.QLineEdit.Normal)
        if (db_text.replace(' ', '') != '') and (db_action is True):
            print(db_text)
            self.db_name = db_text
            # 添加一个mysql数据库连接并打开
            db = QtSql.QSqlDatabase.addDatabase('QSQLITE')  # 创建Mysql数据库,可自定义
            if db.setDatabaseName('{}'.format(db_text)):  # 设置数据库名称
                print("创建数据库文件成功")
            else:
                print("数据文件已经存在")
            db.setHostName("127.0.0.1")#可以有多个连接到同一个数据库,也就是说连接名不唯一
            db.setUserName('tom')#定义用户名
            db.setPassword('tom@123')
            if (db.open()):
                msgBox1 = QMessageBox()
                msgBox1.setText("创建数据库成功")
                msgBox1.exec()
            else:
                msgBox2 = QMessageBox()
                msgBox2.setText("创建数据库失败")
                msgBox2.exec()
            # // success!

            # 实例化一个查询对象
            query = QtSql.QSqlQuery()
            # 创建一个数据库表
            if (query.exec_(
                    "CREATE TABLE stu(sno int NOT NULL,sname varchar(12),ssex varchar(3),sage int,saddr varchar(12),PRIMARY KEY (sno))")):
                print("create table stu and insert values ok!")
                # 插入三条数据
                query.exec_("INSERT INTO stu VALUES (95001,'王明','男',19,'北京')")
                query.exec_("INSERT INTO stu VALUES (95002,'小华','男',21,'天津')")
                query.exec_("INSERT INTO stu VALUES (95003,'小红','女',19,'威海')")
                query.exec_("INSERT INTO stu VALUES (95004,'小花','女',21,'上海')")
                query.exec_("INSERT INTO stu VALUES (95005,'李强','男',22,'河北')")
            self.model = QtSql.QSqlQueryModel()  # 创建一个空的 QSqlTableModel 并将父级设置为父级,将数据库连接设置为 db。如果 db 无效,则将使用默认数据库连接。
            self.table_view = QtWidgets.QTableView()
            self.model.setHeaderData(0, QtCore.Qt.Horizontal, '学号')
            self.model.setHeaderData(1, QtCore.Qt.Horizontal, '姓名')
            self.model.setHeaderData(2, QtCore.Qt.Horizontal, '性别')
            self.model.setHeaderData(3, QtCore.Qt.Horizontal, '年龄')
            self.model.setHeaderData(4, QtCore.Qt.Horizontal, '家庭地址')

            search = self.text.text()
            sql = "SELECT * FROM stu WHERE saddr like"
            strs = "'%" + search + "%'"
            sql = sql + strs
            # sql = "SELECT * FROM S WHERE saddr ='%s'" %search
            #query.exec_(sql)
            self.model.setQuery(sql)
            self.table_view.setModel(self.model)#一定要写在所有设置完之后
            self.table_view.show()

    # 初始化UI界面
    def initUi(self):
        # 设置窗口标题
        self.setWindowTitle("刘某人数据库实验三")
        # 设置窗口大小
        self.resize(600, 400)

        # 创建一个窗口部件
        self.widget = QtWidgets.QWidget()
        # 创建一个网格布局
        self.grid_layout = QtWidgets.QGridLayout()
        # 设置窗口部件的布局为网格布局
        self.widget.setLayout(self.grid_layout)
        #创建一个表格布局
        self.form_box=QtWidgets.QFormLayout()
        # 创建一个工具组
        self.group_box = QtWidgets.QGroupBox('功能按钮')
        self.group_box_layout = QtWidgets.QVBoxLayout()
        self.group_box.setLayout(self.group_box_layout)


        #设置一个LineEdit窗口
        self.text=QtWidgets.QLineEdit()
        # 设置文本框的默认浮现文本
        self.text.setPlaceholderText("输入家庭地址")

        # 按钮控件设置
        self.btn_create=QPushButton("创建")
        self.btn_search = QPushButton("查询")
        self.btn_close = QPushButton("退出")

        # 添加按钮到group_box大组件中
        self.group_box_layout.addWidget(self.text)
        self.group_box_layout.addWidget(self.btn_search)
        self.group_box_layout.addWidget(self.btn_close)

        # 创建一个表格部件
        self.tablewidget=QtWidgets.QTableWidget()

        # 将上述两个部件添加到网格布局中
        self.grid_layout.addWidget(self.tablewidget, 0, 0)  # 放置表格位置在0
        self.grid_layout.addWidget(self.group_box,0,1)#放置

        # 创建按钮功能按钮
        self.btn_search.clicked.connect(self.search_data)
        self.btn_close.clicked.connect(self.close)

        # 设置UI界面的核心部件
        self.setCentralWidget(self.widget)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    gui = MainUi()
    gui.show()
    sys.exit(app.exec_())

简陋版稍微升级,完成版(改变布局顺序)

参考:

python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例

PyQt5表格控件QTableView简介
在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到QTableView类了,在QTableView中可以使用自定义的数据模型来显示内容,通过setModel来绑定数据源
QTableWidget继承自QTableView,主要区别是QTableView可以使用自定义的数据模型来显示内容(先通setModel来绑定数据源),而QTableWidget自能使用标准的数据模型,并且其单元格数据是通过QTableWidgetItem对象实现的,通常QTableWidget就能够满足我们的要求。

根据上述文章,我们知道了tableView()可以被添加到布局当中,那么我们就能很好地展示自己地结果了。

演示效果GIF图

在这里插入图片描述

核心代码

访问github下载,try_for_the_right_ui.py
温习github推送命令:

git init
git add *
git commit -m "the words you want to say for this commit"
git remote add origin https://your github's repository link/
git push -u origin master
https://github.com/songku/database_exp3_finished

鉴于访问github过于麻烦,下面贴出了源码。

# coding:utf-8
#这个文件是为了尝试一个新的UI设置方法
#先设计好tablewidget的model,在add到grid_layout里面

import sys
from PyQt5 import QtCore, QtWidgets, QtSql
from PyQt5.QtWidgets import QApplication, QMessageBox, QPushButton


class MainUi(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUi()

    def search_data(self):
        # 调用输入框获取数据库名称
        db_text, db_action = QtWidgets.QInputDialog.getText(self, '数据库名称', '请输入数据库名称', QtWidgets.QLineEdit.Normal)
        if (db_text.replace(' ', '') != '') and (db_action is True):
            print(db_text)
            self.db_name = db_text
            # 添加一个mysql数据库连接并打开
            db = QtSql.QSqlDatabase.addDatabase('QSQLITE')  # 创建Mysql数据库,可自定义
            if db.setDatabaseName('{}'.format(db_text)):  # 设置数据库名称
                print("创建数据库文件成功")
            else:
                print("数据文件已经存在")
            db.setHostName("127.0.0.1")#可以有多个连接到同一个数据库,也就是说连接名不唯一
            db.setUserName('tom')#定义用户名
            db.setPassword('tom@123')
            if (db.open()):
                msgBox1 = QMessageBox()
                msgBox1.setText("创建数据库成功")
                msgBox1.exec()
            else:
                msgBox2 = QMessageBox()
                msgBox2.setText("创建数据库失败")
                msgBox2.exec()
            # // success!

            # 实例化一个查询对象
            query = QtSql.QSqlQuery()
            # 创建一个数据库表
            if (query.exec_(
                    "CREATE TABLE stu(sno int NOT NULL,sname varchar(12),ssex varchar(3),sage int,saddr varchar(12),PRIMARY KEY (sno))")):
                print("create table stu and insert values ok!")
                # 插入三条数据
                query.exec_("INSERT INTO stu VALUES (95001,'王明','男',19,'北京')")
                query.exec_("INSERT INTO stu VALUES (95002,'小华','男',21,'天津')")
                query.exec_("INSERT INTO stu VALUES (95003,'小红','女',19,'威海')")
                query.exec_("INSERT INTO stu VALUES (95004,'小花','女',21,'上海')")
                query.exec_("INSERT INTO stu VALUES (95005,'李强','男',22,'河北')")


            self.model = QtSql.QSqlQueryModel(self.table_view)  # 创建一个空的 QSqlTableModel 并将父级设置为父级,将数据库连接设置为 db。如果 db 无效,则将使用默认数据库连接。
            self.model.setHeaderData(0, QtCore.Qt.Horizontal, '学号')
            self.model.setHeaderData(1, QtCore.Qt.Horizontal, '姓名')
            self.model.setHeaderData(2, QtCore.Qt.Horizontal, '性别')
            self.model.setHeaderData(3, QtCore.Qt.Horizontal, '年龄')
            self.model.setHeaderData(4, QtCore.Qt.Horizontal, '家庭地址')

            search = self.text.text()
            sql = "SELECT * FROM stu WHERE saddr like"
            strs = "'%" + search + "%'"
            sql = sql + strs
            # sql = "SELECT * FROM S WHERE saddr ='%s'" %search
            #query.exec_(sql)
            self.model.setQuery(sql)
            self.table_view.setModel(self.model)#一定要写在所有设置完之后

            # self.table_view.setModel(self.model)
            # self.table_view.show()
            #self.tablewidget.setModel(self.model)


    # 初始化UI界面
    def initUi(self):
        # 设置窗口标题
        self.setWindowTitle("刘某人的数据库实验三")
        # 设置窗口大小
        self.resize(600, 400)

        # 创建一个窗口部件
        self.widget = QtWidgets.QWidget()
        # 创建一个网格布局
        self.grid_layout = QtWidgets.QGridLayout()
        # 设置窗口部件的布局为网格布局
        self.widget.setLayout(self.grid_layout)

        # 创建一个工具组
        self.group_box = QtWidgets.QGroupBox('功能按钮')
        self.group_box_layout = QtWidgets.QVBoxLayout()
        self.group_box.setLayout(self.group_box_layout)


        #设置一个LineEdit窗口
        self.text=QtWidgets.QLineEdit()
        # 设置文本框的默认浮现文本
        self.text.setPlaceholderText("输入家庭地址")

        self.table_view = QtWidgets.QTableView()
        # 按钮控件设置
        self.btn_create=QPushButton("创建")
        self.btn_search = QPushButton("查询")
        self.btn_close = QPushButton("退出")

        # 添加按钮到group_box大组件中
        self.group_box_layout.addWidget(self.text)
        self.group_box_layout.addWidget(self.btn_search)
        self.group_box_layout.addWidget(self.btn_close)

        # 将上述两个部件添加到网格布局中
        self.grid_layout.addWidget(self.table_view, 0, 0)  # 放置表格位置在0
        self.grid_layout.addWidget(self.group_box, 0, 1)  # 放置
        # 创建按钮功能按钮
        self.btn_search.clicked.connect(self.search_data)
        self.btn_close.clicked.connect(self.close)

        # 设置UI界面的核心部件
        self.setCentralWidget(self.widget)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    gui = MainUi()
    gui.show()
    sys.exit(app.exec_())

同学的核心代码(QT开发)

既然pymysql连接出问题,那么抽空研究下pysqlite,依据connect直接连接到数据库。
在这里插入图片描述

def abc(self):
        db = pymysql.connect(host="localhost",user="root",passwd="133sql",db="ST")#SNO,SNAME,SSEX,SAGE,SADDR#####
        rese= self.lineEdit.text()
        self.textBrowser.clear()
        cursor = db.cursor()
        sql = "SELECT * FROM S WHERE saddr like"
        strs="'%"+rese+"%'"
        sql=sql+strs
        # sql = "SELECT * FROM S WHERE saddr ='%s'" % rese 
        cursor.execute(sql)
        results = cursor.fetchall()
            
        for row in results:
            snos = row[0]
            snames = row[1]
            ssexs = row[2]
            sages = row[3]
            saddrs=row[4]
            datass=str(snos)+"  "+snames+"  "+ssexs+"  "+str(sages)+"  "+saddrs
            self.textBrowser.append(datass)        
        db.close()
实验四视图、数据控制与嵌入式SQL语言实验 基于实验一建立的“图书读者数据库”(Book_Reader_DB)和实验二输入的部分虚拟数据,在SQL Server 2000查询分析器的Transact-SQL语句输入区输入Transact-SQL语句,然后点击“查询”菜单中的“执行”菜单项(或用F5快捷键),执行输入区的Transact-SQL语句。具体实验内容如下: 1、视图定义与查询实验 ① 在“图书读者数据库”(Book_Reader_DB)中,先用视图创建向导的方法创建视图View1和View2。其中View1包括书号、书名、定价、数量等属性。View2包括读者号、读者姓名、单位、电话、书号、书名、借阅日期、应归还日期、实际还书日期和过期天数等属性,其条件是所有借书已过期的读者和借书情况(假定借阅期为60天); ② 根据上述定义的视图,在查询分析器中用语句完成如下查询: A:通过视图View1查询书库中藏书的情况; B:通过视图View2查询借书过期的读者和借书情况及罚款金额(假定超期罚款标准为1元/天); ③ 在查询分析器中用SQL语句来创建视图View3和视图View4,视图View3的要求与View1相同,视图View4与视图View2的条件相同。 2、数据控制实验 ① 假定系统有U1、U2、U3 、U4、U5、U6六个登录用户,试将查询图书表的权限由管理员授权给U1, 以U1用户的身份重新登录系统后,再把权限授予给U2; ② 系统管理员把插入数据给借阅表的权限授予给U3; ③ 系统管理员把添加图书数据的权限授予给U4; ④ 系统管理员把修改读者数据信息的权限授予给U5; ⑤ 将U1访问图书表的权限收回; 3、嵌入式SQL语言实验 ① 用VB建立一个工程,在对话框Form1上添加一些访问数据库和显示数据的控件,并通过ODBC建立与数据库Book_Reader_DB的连接; ② 在Form1上添加一个按钮Button1,对Button1添加一个点击事件(双击按钮Button1即可进入源代码输入界面),在事件上添加一些访问数据库中表对象或视图对象的SQL语句,运行工程,即可将满足要求的记录显示在界面的显示数据的控件上。换用不同的SQL语句,检查其执行结果。 上述每项实验内容相应的实验步骤必须进行详细的记录,并将其整理后写在实验报告中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值