学习面向对象语言与SQL SEREVR数据库的连接方法及嵌入式SQL语言查询编程
参考
该文章介绍了如何使用sqlite建立一个支持增删的可视化程序。注意头文件要添加上QApplication
如何在PyQt5中对数据库进行操作?
这篇文章介绍了与MySQL数据库的连接。步骤详细易懂。注意安装mysql-connector-python这个library。
Python Tutorial – Working with MySQL Database in Python
ctrl键+函数->查到函数声明
一、实验目的
- 本次实验的主要目的是主高级语句的使用,学习主高级语言与数据库的连接方法与编程技巧。
- 嵌入式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。
访问github获取完整代码
注意在运行前要启动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 KEY
和AUTO_INCREMENT
和DEFAULT
和CHARSET
)
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()