在企业信息化应用中,数据库的使用是不可避免的需求。而在Python中,使用PyQt框架可以很方便地实现数据库绑定功能,简化了开发者的工作,提高开发效率。本文将介绍的实现方法。
一、Python PyQt与数据库
Python PyQt是Python语言的一个GUI编程框架,通过与数据库的结合,能够实现灵活快速的数据管理操作。PyQt可以操作绝大多数的数据库,包括SQLite、MySQL、Oracle等等。
通过使用PyQt实现数据库绑定功能,可以方便地将数据表或视图与控件进行绑定,实现数据的自动更新与显示,这大大减轻了程序员的负担,提高了开发效率。
二、PyQt与SQLite数据库的绑定
在实现数据库绑定功能时,我们首先需要选择合适的数据库。在本文中,我们选择SQLite,这是一个轻量级的数据库,非常适合小型项目的使用。
1. PySQLite模块的安装
首先需要安装PySQLite模块,这个模块提供了Python对SQLite数据库的支持。可以通过pip工具进行安装:
“`python
pip install pysqlite3
“`
安装完成后,我们就可以开始使用这个模块了。
2. 建立SQLite数据库
我们需要在SQLite数据库中创建一张表,来存储将要绑定的数据。以员工信息表为例,表结构如下:
“`SQL
CREATE TABLE employee (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(20) NOT NULL,
gender VARCHAR(2) NOT NULL,
age INTEGER DEFAULT 0,
department VARCHAR(50) NOT NULL
)
“`
这个表包含了员工的基本信息,包括编号、姓名、性别、年龄和所在部门。
3. 建立PyQt窗口
我们需要创建一个PyQt窗口,用来显示员工信息表中的数据。这个窗口需要包含一个QTableView控件,用来显示表格数据。
“`python
import sys
from PyQt5.QtWidgets import QApplication,QMnWindow,QTableView
from PyQt5.QtSql import QSqlDatabase,QSqlQuery
class MnWindow(QMnWindow):
def __init__(self,parent=None):
super(MnWindow,self).__init__(parent)
self.setWindowTitle(‘Employee Information’)
self.resize(480,280)
self.tableView=QTableView(self)
self.tableView.setGeometry(20,20,440,240)
self.tableView.setSortingEnabled(True)
self.db=QSqlDatabase.addDatabase(‘QSQLITE’)
self.db.setDatabaseName(’employee.db’)
if not self.db.open():
print(self.db.lastError().text())
sys.exit(1)
self.model=QtSql.QSqlTableModel(self,db)
self.model.setTable(’employee’)
self.model.sort(0,QtCore.Qt.DescendingOrder) # 按第0列降序排列
self.model.select()
self.tableView.setModel(self.model)
self.tableView.resizeColumnsToContents() # 自适应列宽
if __name__ == ‘__mn__’:
app=QApplication(sys.argv)
win=MnWindow()
win.show()
sys.exit(app.exec_())
“`
在上面的代码中,我们创建了一个QMnWindow窗口,包含了一个QTableView控件。同时,我们通过QSqlDatabase.addDatabase(‘QSQLITE’)方法创建了一个SQLite数据库,并连接到了名为employee.db的数据库文件。在连接成功后,我们可以通过QSqlQuery对象进行查询和更新数据库。这里的QSqlTableModel控件可以方便地与数据库中的数据表进行绑定。
我们将表格设置为自适应列宽。这样,每个字段的宽度将调整得足够宽,可以容纳数据,增加用户体验。
三、绑定控件与数据库
在上一节中,我们已经实现了创建PyQt窗口和连接SQLite数据库的功能。下一步是实现控件与数据库的绑定,以自动更新数据。
1. 实现数据插入
我们可以使用QSqlQuery对象插入新的员工记录。当我们单击插入按钮时,一个新的员工记录将入到数据库中。同时,表格中的数据也将刷新。
“`python
import sys
from PyQt5.QtWidgets import QApplication,QMnWindow,QWidget,QHBoxLayout,QVBoxLayout,QTableView,QLineEdit,QPushButton
from PyQt5.QtSql import QSqlDatabase,QSqlQuery,QSqlTableModel
class MnWindow(QMnWindow):
def __init__(self,parent=None):
super(MnWindow,self).__init__(parent)
self.setWindowTitle(‘Employee Information’)
self.resize(480,280)
centralWidget=QWidget(self)
self.setCentralWidget(centralWidget)
self.tableView=QTableView(self)
self.tableView.setSortingEnabled(True)
self.db=QSqlDatabase.addDatabase(‘QSQLITE’)
self.db.setDatabaseName(’employee.db’)
if not self.db.open():
print(self.db.lastError().text())
sys.exit(1)
self.model=QSqlTableModel(self,db)
self.model.setTable(’employee’)
self.model.sort(0,QtCore.Qt.DescendingOrder)
self.model.select()
self.tableView.setModel(self.model)
self.tableView.resizeColumnsToContents()
self.nameEdit=QLineEdit(self)
self.genderEdit=QLineEdit(self)
self.ageEdit=QLineEdit(self)
self.departmentEdit=QLineEdit(self)
nameLabel=QLabel(‘Name’,self)
genderLabel=QLabel(‘Gender’,self)
ageLabel=QLabel(‘Age’,self)
departmentLabel=QLabel(‘Department’,self)
insertButton=QPushButton(‘Insert’,self)
insertButton.clicked.connect(self.insertRecord)
hlayout=QHBoxLayout()
vlayout=QVBoxLayout(centralWidget)
vlayout.addWidget(self.tableView)
vlayout.addLayout(hlayout)
hlayout.addWidget(nameLabel)
hlayout.addWidget(self.nameEdit)
hlayout.addWidget(genderLabel)
hlayout.addWidget(self.genderEdit)
hlayout.addWidget(ageLabel)
hlayout.addWidget(self.ageEdit)
hlayout.addWidget(departmentLabel)
hlayout.addWidget(self.departmentEdit)
hlayout.addWidget(insertButton)
def insertRecord(self):
query=QSqlQuery(db)
query.prepare(‘INSERT INTO employee (name,gender,age,department) VALUES (?,?,?,?)’)
query.addBindValue(self.nameEdit.text())
query.addBindValue(self.genderEdit.text())
query.addBindValue(int(self.ageEdit.text()))
query.addBindValue(self.departmentEdit.text())
if not query.exec():
print(query.lastError().text())
self.model.select()
if __name__ == ‘__mn__’:
app=QApplication(sys.argv)
win=MnWindow()
win.show()
sys.exit(app.exec_())
“`
在上面的代码中,我们创建了一个新的QWidget,并在其中添加了四个QLineEdit控件(分别用于输入员工姓名、性别、年龄和所属部门)、一个QPushButton控件(用于插入新的员工记录)。通过调用insertRecord函数,在将所有输入数据绑定到QSqlQuery对象后,将新条目插入到数据库中。
2. 实现数据删除
当我们单击删除按钮时,选择的员工记录将被删除。同时,表格中的数据也将刷新。
“`python
import sys
from PyQt5.QtWidgets import QApplication,QMnWindow,QWidget,QHBoxLayout,QVBoxLayout,QTableView,QLineEdit,QPushButton
from PyQt5.QtSql import QSqlDatabase,QSqlQuery,QSqlTableModel
class MnWindow(QMnWindow):
def __init__(self,parent=None):
super(MnWindow,self).__init__(parent)
self.setWindowTitle(‘Employee Information’)
self.resize(480,280)
centralWidget=QWidget(self)
self.setCentralWidget(centralWidget)
self.tableView=QTableView(self)
self.tableView.setSortingEnabled(True)
self.db=QSqlDatabase.addDatabase(‘QSQLITE’)
self.db.setDatabaseName(’employee.db’)
if not self.db.open():
print(self.db.lastError().text())
sys.exit(1)
self.model=QSqlTableModel(self,db)
self.model.setTable(’employee’)
self.model.sort(0,QtCore.Qt.DescendingOrder)
self.model.select()
self.tableView.setModel(self.model)
self.tableView.resizeColumnsToContents()
self.nameEdit=QLineEdit(self)
self.genderEdit=QLineEdit(self)
self.ageEdit=QLineEdit(self)
self.departmentEdit=QLineEdit(self)
nameLabel=QLabel(‘Name’,self)
genderLabel=QLabel(‘Gender’,self)
ageLabel=QLabel(‘Age’,self)
departmentLabel=QLabel(‘Department’,self)
insertButton=QPushButton(‘Insert’,self)
insertButton.clicked.connect(self.insertRecord)
deleteButton=QPushButton(‘Delete’,self)
deleteButton.clicked.connect(self.deleteRecord)
hlayout=QHBoxLayout()
vlayout=QVBoxLayout(centralWidget)
vlayout.addWidget(self.tableView)
vlayout.addLayout(hlayout)
hlayout.addWidget(nameLabel)
hlayout.addWidget(self.nameEdit)
hlayout.addWidget(genderLabel)
hlayout.addWidget(self.genderEdit)
hlayout.addWidget(ageLabel)
hlayout.addWidget(self.ageEdit)
hlayout.addWidget(departmentLabel)
hlayout.addWidget(self.departmentEdit)
hlayout.addWidget(insertButton)
hlayout.addWidget(deleteButton)
def insertRecord(self):
query=QSqlQuery(db)
query.prepare(‘INSERT INTO employee (name,gender,age,department) VALUES (?,?,?,?)’)
query.addBindValue(self.nameEdit.text())
query.addBindValue(self.genderEdit.text())
query.addBindValue(int(self.ageEdit.text()))
query.addBindValue(self.departmentEdit.text())
if not query.exec():
print(query.lastError().text())
self.model.select()
def deleteRecord(self):
selected=self.tableView.selectedIndexes()
if len(selected)!=1:
return
row=selected[0].row()
self.model.removeRows(row,1)
if __name__ == ‘__mn__’:
app=QApplication(sys.argv)
win=MnWindow()
win.show()
sys.exit(app.exec_())
“`
在上面的代码中,我们创建了一个新的QPushButton控件,用于从数据库中删除所选员工记录。我们使用QTableView.selectedIndexes()方法获取被选中的数据行,然后调用QSqlTableModel.removeRows()方法删除该记录。
相关问题拓展阅读:
用pyqt做好了前端,想用django做服务器,想问一下大概怎么搭建呢?
一般客户端(也就是你说的前段)跟服务器端(你准备使用Django)都是通过 HTTP 协议交换信息的(除纯尘非有特别的需求,才会使用别的或者定制协议)。
在 客户端(PyQT)中,你可以安装 Requests 库,它可以帮助你发送 HTTP 请求给服务器端,
在 Django 中你可以使用燃塌 Django REST Framework
网页链接
处理 客户端做段禅的
HTTP请求
。
pyqt4pyqt5哪个好用_pyqt5使用
PyQt5不兼容PyQt4(尽管经验表明,将PyQt4的应用程序移植到PyQt5难度不是很大)。本节描述了两者之间的主要差异。
支持Python的版本
不支持较早的Python2.6之前的版本┊。
推荐使用特性
PyQt5不支持任何被标记为过时的或废弃的QTV5.0的API。然而,还是可能有一些“漏网之鱼”。如果将来发现了,这些错误将被删除。
多个API
PyQt4支持许多不同的API版本(QString,QVariant等)。QVariant
PyQt5只支持V2版本的API。一个例外:对于QVariant,去除了。
老式的信号和槽
PyQt4的旧式的信号和槽不再被支持。因此以下用法在PyQt5中已经不能使用:
QObject.connect()
QObject.emit()
SIGNAL()
SLOT()
所有那些含有参数,并且对返回结果调用SIGNAL()或SLOT()的方法不再被支持。绑定信号与调用函数总是等效的。
此外,另一个差异是增加了下面的函数:
disconnect()断开所有对QObject实例的连接,不需要参数。
新风格的信号和槽
QT实现的信号与一个可选的参数作为两个独立的信号,一个与论点和一个没有它。PyQt4暴露这两允许你连接到他们每个。然而,当发射信号,你必须使用适当的参数发出的信号数。
PyQt5暴露唯一的信号在所有指定参数。然而它允许任何可选参数被省略时,发射信号。
不同于PyQt4,PyQt5支持在类中自定义属性、信号与槽,即使这个类没有继承自QObject(比如:混合类)。
,QtScript和模块
PyQt4的,QtScript和模块不再支持。这些已被替换为PyQt5的QtQml和QtQuick模块,PyQt5支持Python对象创建QML。
QtGui模块
PyQt4的QtGui模块,在PyQt5中被拆分成三个模块:QtGui,和QtWidgets。
QtOpenGL模块
只有QGlContext,QGlFormat和QGlWidget类被PyQt5支持。
QtWebKit模块
PyQt4的QtWebKit模块被分成PyQt5的QtWebKit和模块。
pyqtconfig模块
PyQt4的pyqtconfig模块不支持。截面PyQt5扩展的API介绍了支持PyQt5(例如提供第三方包qscintilla),要建立在PyQt5。
dbus.mainloop.qt模块
PyQt4的dbus.mainloop.qt模块称为dbus.mainloop.PyQt5在PyQt5。这使得他们可以并排安装。它们的功能是相同。
QDataStream
的reaint8(),readint8(),writeuint8()和writeint8()方法解释值读写数字。PyQt4中它们被解释为单个字符的字符串。
QFileDialog
PyQt4的QFileDialog类的(),()和()方法,在PyQt5中已更名为(),()和()。
而PyQt4原来的(),()和()不再被PyQt5支持。
QGraphicsItemAnimation
对废弃的QGraphicsItemAnimation类的支持已被删除。如果移植现有的PyQt4应用程序,首先考虑用QPropertyAnimation替换。
QMatrix
对废弃的QMatrix类的支持已被删除。如果移植现有的PyQt4应用程序,首先考虑用QTransform替换。
QPyTextObject
PyQt4的QPyTextObject,是作为一个无法定义一个继承多个Qt类的Python类的变通的解决方法。PyQt5支持定义一个Python类,来继承多个Qt类,只要他们已经在C声明为Q_DECLARE_INTERFACE。所以,QPyTextObject没有在PyQt5中实现。
QSet
PyQt4,套装在Python中的V2和V3一组Python列表实现。在PyQt5套装总是作为一个集实现。
pyuic5
pyuic5不支持pyqt3——包装国旗pyuic4。
pyr5
pyr5不支持-PY2和-PY3国旗pyr4。输出pyr5兼容所有版本的PythonPython2.6入手。
多重继承
不像PyQt4PyQt5类实现多重继承,合作。在其他的话总是做PyQt5类下面的Python代码在等效V3__init__方法(如kwds是一个未使用的关键词参数字典):
super().__init__(**kwds)
这意味着,那些未使用的关键字的参数传递给__init__任何mixin类的方法。这些混合类必须合作,即必须如果他们有自己做一个类似的__init__实现。
当使用多重继承PyQt4是常见的__init__的超类方法明确,例如:
classMyQObject(QObject,MyMixin):
def__init__(self,parent,mixin_arg):
QObject.__init__(self,parent)
MyMixin.__init__(self,mixin_arg)
#Otherinitialisation…
在上述将导致PyQt5mymixin__init__。被称为两。而要实现:
classMyQObject(QObject,MyMixin):
def__init__(self,**kwds):
super().__init__(**kwds)
#Otherinitialisation…
请注意,如果没有其他的初始化做那么__init__方法不需要。
混合类应实施如下:
classMyMixin:
def__init__(self,mixin_arg,**kwds):
super().__init__(**kwds)
#Otherinitialisation…
为什么用pyqt的不多?
大多是因为不会用,他们在自学的时候,找的资料教程一般都是手写的代码,等到他们学会用的时候,就知道是真的好用。
PyQt是一个创建GUI
应用程序
的工具包。它是Python编程语言和Qt库的成功融合。Qt库是目前最强大的库之一。PyQt是由Phil Thompson 开发。
PyQt实现了一个Python模块集。它有超过300类,将近6000个函数和银兄方法。它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac。
PyQt采用双许可证,开发人员可以选择GPL和商业许可。在此之前,GPL的版本只能用在Unix上,从PyQt的版本4开始,GPL许可证可用于所有支持的平台。
因为可用的类有很多,他们被分成几个模块。 QtCore模块包含核心的非GUI功能。该模块用于时间、文件和目录、各种
数据类型
、流、网址、MIME类型、线程或进程。
QtGui模块包含图形组件和相关的类,例如按钮、窗体、状态栏、工具宏缓栏、滚动条、位图、颜色、字体等。
QtNetwork模块包含了网络编程的类,这些类允许编写TCP/IP和UDP的客户端和服务器,他们使网络编程更简单,更轻便。
QtXml包含使用XML文件的类,这个模块提供了SAX和DOM API的实现。QtSvg模块提蔽搏模供显示的SVG文件的类。可缩放矢量图形(SVG)是一种用于描述二维图形和图形应用程序的
XML语言
。
QtOpenGL模块使用OpenGL库渲染3D和2D图形,该模块能够无缝集成Qt的GUI库和OpenGL库。QtSql模块提供用于数据库的类。
pyqt 绑定数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于pyqt 绑定数据库,Python PyQt实现数据库绑定功能,用pyqt做好了前端,想用django做服务器,想问一下大概怎么搭建呢?,pyqt4pyqt5哪个好用_pyqt5使用,为什么用pyqt的不多?的信息别忘了在本站进行查找喔。
来源地址:Python PyQt实现数据库绑定功能 (pyqt 绑定数据库)
转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:www.88531.cn资享网,谢谢!^^