建筑学,甜茶,自如-美品攻略,全球好物,我们造

admin 4个月前 ( 11-01 13:14 ) 0条评论
摘要: Python GUI教程(十四):在PyQt5中使用数据...

在桌面图画化界面编程中,咱们通沈沛琴常需要将一些数据或装备信息存储在本地。在本地进行数据的存储,咱们能够直接运用文本文件,比方ini文件、csv文件、json文件等,或者是运用文件型的数据库(比方sqlit3)进行存储。

Py借种2Qt5的SQL数据库支撑

Qt渠道对SQL编程有着杰出的支撑,PyQt5也同时承继了过来。在PyQt5中,QtSql子模块供给对SQL数据库的支撑:

从上图咱们能够发现,QtSQL模块中包含了很多个类,这些类归总起来首要lmba包含三大部分:

  • 驱动层,用于供给特定数据库与SQL API接口之间的初级衔接功能;其间包含QSqlDriver、QSqlDriverCreatorBase、QSqlResult;
  • SQL API层,用于供给对数据库的拜访。一般来说,咱们会运用QSqlDatabase树立数据库衔接,运用QSqlQuery等类完结数据库的交互(履行SQL句子)。此外还有QSqlError、QSqlField、QSqlIndex、QSql建筑学,甜茶,自若-美品攻略,全球好物,咱们造Record等类。
  • 用户界面操作层,用于将数据库操作的数据链接到PyQt相应的数据小部件,将数据和操作展现在Qt界面中。这些类包含:QSqlQueryMode18号簿本l、QSqlTableModel等。

在这些类中,每个类都有自己特定的用处,百变魔音其间:

  • QSQL:包含整个Qt SQL模块中运用的各种标识符
  • QSqlDatabas建筑学,甜茶,自若-美品攻略,全球好物,咱们造e:处理与数据库的衔接
  • QSqlDriver:用于拜访特定SQL数据库的笼统基类
  • QSqlDriverCreator:模板类,为特定驱动程序类型供给SQL驱动程序工厂
  • QSqlDriverCreatorBase:SQL驱动程序工厂的基类
  • QSqlError:SQL数据库错误信息
  • QSqlField:处理SQL数据库表和视图中的字段
  • QSqlIndex:用于操作和描绘数据库索引的函数
  • QSqlQuery:履行和操作SQL句子的办法
  • QSqlQueryModel:SQL成果集的只读数据模型
  • QSqlRecord:封装数据库记载
  • QSqlRelationalTableModel:具有外键支撑的单个数据库表的可修正数据模型
  • QSqlResult:用于从特定SQL数据库拜访数据的笼统接口
  • QSqlTableModel:单个数据库表的可修正数据模型

在建筑学,甜茶,自若-美品攻略,全球好物,咱们造实践的PyQt编程中,咱们很少运用驱动层的类,多经过API层的来树立数据库衔接、进行数据库查询等,然后经过用户界面操作层的类将数据成果显现在图形界面中。下面咱们就来简略运用一下。

在PyQt5中简略运用数据库

创立一个UI界面

首要,咱们经过PyQt5创立一个根本的图形界面。这个界面由两个部分组成:

  • 按钮操作层:用来通马艺宣过按钮进行数据库操作;
  • 数据库展现层:用来展现数据库表的信息;

UI界面的代码如下所示:

# coding:utf-8
from PyQt5 import QtGui,QtCore,QtWidge建筑学,甜茶,自若-美品攻略,全球好物,咱们造ts,QtSql
import sys
'''
州的先生 - 在PyQt5中运用数据库
'''
class MainUi(QtWidgets.QMainWindow)陆柏久:
def __init__(self):
super().__init__()
self.initUi()
# 初始化UI界面
def initUi(self):
# 设置窗口标题
self.setWindowTitle("州的先生 - 在PyQt5中运用数据库")
# 设置窗口巨细
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.a平衡球13关ddWidget(self.group_box,0,0)
self.grid_layout.addWidget(self.table_widget,0,1)
# 创立按钮组的按钮
self.b_create_db = QtWidgets.QPushButton("创立数据库")
self.b_create_db.clicked.connect(self.create_db)
self.b_view_data = QtWidgets.QPushButton("阅读数据")
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.add杨冰的老婆Widget(self.b_close)
# 设置UI界面的核心部件
self.setCentralWidget(self.widget)

终究显现出来的UI界面如下图所示:

衔接一个数据库

在上面创立的UI界面中,咱们有一个“创立数据库”的按钮,这个按钮咱们用来树立一个数据库衔接。

Qt中内置了好几个数据库的驱动程序,也就是说咱们能够直接在PyQt中对这些数据库进行操作。程川陆烟这些内置的数据库包含:

  • IBM DB2,驱动名为QDB2;
  • Borland InterBase,驱动名为QIBASE;
  • MySQL,锐哥好美驱动名为QMYSQL;
  • Oracle,驱动名为QOCI;
  • Microsoft SQL Server和其他契合ODBC的数据库,驱动名为QODBC;
  • PostgreSQL,驱动名为QPSQL;
  • SQLite2,驱动名为QSQLITE2;
  • SQLite3,驱动名为QSQLITE;

经过这些驱动名,咱们能够凭借QSqlDatabase类的addDatabase办法增加某个数据库的衔接,比方树立一个MySQL数据库的衔接为:

db = QtSql.QSqlDatabase.addDatabase('QMYSQL')
db.setHostName('主机名')
db.setDatabaseName('数据库名')
db.setUserName('用户名')
db.setPassword('暗码')
db.open()

为了便利演示,在此咱们运用Sqlite数据库。

在Ma隐秘情事inUi()类中,咱们创立一个名为crea1024btte_db()的办法:

 # 创立数据库
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
# 增加一个sqlite数据库衔接并翻开
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('{}.sqlite'.format(db_text))
db.open()
# 实例化一个查询目标
query = QtSql.QSqlQuery()
# 创立一个数据库表
query.exec_("create table zmister(ID int primary key, "
"site_name varchar(20), site_url varchar(100))")
# 刺进三条数据
query.exec_("inser王钦和莲心t into zmister values(1000, '州的先生', 'http://zmiste佳人女r.com')")
query.exec_("insert into zmister values(1001, '百度', 'http://www.baidu.com')")
query.exec_("insert into zsamanthasaintmister values(1002, '腾讯', 'http://www.qq.com')")
print('创立数据库成功')
except Exception as e:
print(e)

在这个办法中,咱们自定义数据库名并创立一个sqlite数据库,然后在这个数据库中创立了一个名为zmister的数据库表,最终在zmister数据库表中刺进了三条数据。

接下来,咱们将这个办法绑定到【创立数据库】按钮的点击事情上:

self.b_create_db.clicked.connect(self.create_db)

这样,当咱们点击【创立数据库】按钮的时分,UI界面会弹出一个文本输入框供咱们输入数据库的称号,然后创立一个数据表并刺进数据:

完结操作之后,会发现文件同级目录下多出了一个zmister.sqlite文件,咱们运用SQLite Expert等SQLite数据库可视化软件翻开它:

这样,咱们就成功在PyQt5中创立衔接并写入操作了一个数据库。

在UI界面检查和修正数据

上面咱们创立了一个SQLite数据库并在其间写入了三条数据,怎么将数据表久播中的数据显现在UI界面中呢。咱们能够凭借QSqlTableModel类来完结。

还记得咱们在创立UI界面的时分,在界面的右方放置了一个QTableView()部件,咱们的数据库数据将显现在这上面。

持续在MainUi()类中创立一个名为view_data()的办法,在办法中实例化一个QSqlTableModel(),并将QTableView()部件的model模型设置为实例化后的QSqlTableModel():

 # 阅读数据
def view_data(self):
# 实例化建筑学,甜茶,自若-美品攻略,全球好物,咱们造一个可修正数据模型
self.model = QtSql.QSqlTableModel()
self.tab黑水锅庄le_widget.setModel(self.model)
self.model.setTable('zmister') # 设置数据模型的数据表
self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange) # 答应字段更改
self.model.select() # 查询一切数据
# 设置表格头
self.model.setHeaderData(0,QtCore.Qt.Horizontal,'ID')
self.model.setHeaderData(1, QtCore.Qt.Horizontal, '站点称号')
self.model.setHeaderData(2, QtCore.Qt.Horizontal, '站点地址')

然后,将view_data()办法绑定在UI界面的【阅读数据】按钮的点击事情中:

self.b_view_data.clicked.connect(self.view_data)

这样,咱们在点击【阅读数据】按钮的时分,会将zmister表中的一切数据显现出来:

除了简略的将数据显现在UI界面上,咱们还能够直接在UI界面上修正数据:

增加和删去数据

完结查和改的SQL操作之后,咱们建筑学,甜茶,自若-美品攻略,全球好物,咱们造接着来了解一下怎么增加数据和删去数据。

增加数据经过数据模型目标的insertRows()办法来完结,删去数据则经过数据模型目标的removeRow()办法来完结。

咱们持续在MainUi()类中创立两个办法:add_row_data()和del_row_data():

 # 增加一行数据行
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.currentInd建筑学,甜茶,自若-美品攻略,全球好物,咱们造ex().row())
else:
self.create_db()

然后将这两个办法别离绑定在【增加一行】和【删去一行】按钮的点击事情上:

self.b_add_row.clicked.connect(self.add_row_data)
se武萌战姬lf.b_delete_row.clicked.connect(self.del_row_data)

这样就完结了UI界面上的增加数据和删去数据:

这样,咱们就根本完结了运用PyQt5对数据库的增修改查操作,愈加具体的运用和阐明请参阅Qt文档。

原文出处:州的先生博客原文地址:https://zmister.com/archives/354.html

文章版权及转载声明:

作者:admin本文地址:http://www.meipinw.com/articles/4095.html发布于 4个月前 ( 11-01 13:14 )
文章转载或复制请以超链接形式并注明出处美品攻略,全球好物,我们造