PyQt5是Python语言的GUI编程工具包,它涵盖了大量的GUI元素和布局选项,并且易于使用。其中,QtSql模块提供了与数据库交互的支持,使得我们可以使用Python语言来操作关系型数据库。本篇文章将介绍如何使用PyQt5的QtSql模块,并提供两个示例说明。
安装PyQt5
在使用PyQt5之前,需要先进行安装。在命令行中输入以下命令即可:
pip install PyQt5
初始化QtSql
在使用QtSql之前,需要对其进行初始化。以下是一个初始化QtSql的示例:
from PyQt5.QtSql import QSqlDatabase
# 初始化QtSql
def initSql():
db = QSqlDatabase.addDatabase("QSQLITE") # 使用SQLite数据库
db.setDatabaseName("mydatabase.db") # 数据库文件名
if not db.open(): # 打开数据库
print("Failed to connect to database.")
return False
return True
在上述示例中,我们首先导入了QtSql模块,并使用QSqlDatabase
类创建了一个SQLite数据库实例。接着,我们指定了数据库文件名,并尝试打开数据库。如果打开成功,那么db.open()
方法将返回True
。
连接到数据库
成功初始化QtSql后,我们就可以连接到数据库了。以下是一个连接到SQLite数据库的示例:
from PyQt5.QtSql import QSqlDatabase, QSqlQuery
# 连接到数据库
def connect():
db = QSqlDatabase.database() # 获取数据库实例
if not db.isValid(): # 如果实例无效,则返回False
return False
query = QSqlQuery() # 创建一个查询对象
if not query.exec_("create table person(id int primary key, name varchar(20))"):
# 如果无法创建表,则返回False
return False
return True
在上述示例中,我们首先获取了数据库实例,并检查其是否有效。如果数据库实例无效,则将返回False
。接着,我们创建了一个查询对象,并使用query.exec_()
方法创建了一个名为“person”的表。如果创建成功,则返回True
。
执行SQL语句
成功连接到数据库后,我们就可以执行SQL语句了。以下是一个使用QSqlQuery
类执行SQL语句的示例:
from PyQt5.QtSql import QSqlQuery
# 执行SQL语句
def executeSql():
query = QSqlQuery() # 创建一个查询对象
query.prepare("insert into person values (?, ?)") # 创建一个插入语句
query.addBindValue(1) # 绑定参数
query.addBindValue("Alice")
if not query.exec_(): # 执行SQL语句
return False
return True
在上述示例中,我们首先创建了一个查询对象,并使用query.prepare()
方法创建了一个插入语句。接着,我们使用query.addBindValue()
方法绑定了两个参数,然后使用query.exec_()
方法执行了SQL语句。如果执行成功,则返回True
。
查询数据
除了执行SQL语句外,我们还可以使用QSqlQuery
类进行数据查询。以下是一个使用QSqlQuery
类查询数据的示例:
from PyQt5.QtSql import QSqlQuery
# 查询数据
def queryData():
query = QSqlQuery() # 创建一个查询对象
query.exec_("select * from person") # 执行SQL查询语句
while query.next(): # 遍历查询结果
id = query.value(0) # 获取第一列的值
name = query.value(1) # 获取第二列的值
print("{}: {}".format(id, name))
在上述示例中,我们首先创建了一个查询对象,并使用query.exec_()
方法执行了一个查询语句。接着,我们使用query.next()
方法遍历了查询结果,在遍历的过程中,通过query.value()
方法获取了每一列的值,并将其打印出来。
示例说明
我们可以通过一个使用PyQt5和QtSql模块的示例来更好地理解它们的用法。以下是一个使用PyQt5和QtSql模块创建的人物名单管理器:
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView
import sys
# 初始化QtSql
def initSql():
db = QSqlDatabase.addDatabase("QSQLITE") # 使用SQLite数据库
db.setDatabaseName("mydatabase.db") # 数据库文件名
if not db.open(): # 打开数据库
print("Failed to connect to database.")
return False
return True
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setWindowTitle("Person List")
self.table = QTableView() # 创建一个表格视图
self.model = QSqlTableModel() # 创建一个表格模型
self.model.setTable("person") # 指定表格名
self.model.select() # 查询数据
self.table.setModel(self.model) # 设置模型
self.table.setGeometry(0, 0, 400, 400)
self.setCentralWidget(self.table)
if __name__ == "__main__":
app = QApplication(sys.argv)
if not initSql():
sys.exit(1)
win = MainWindow()
win.show()
sys.exit(app.exec_())
在上述示例中,我们首先创建了一个名为“Person List”的窗口,并创建了一个QTableView
对象和一个QSqlTableModel
对象。接着,我们将QSqlTableModel
对象和SQLite数据库中的“person”表格进行连接,并使得QSqlTableModel
对象可以查询数据。最后,我们将QTableView
对象设置为窗口的中心控件,并显示该窗口。
另外,我们还可以使用QSqlTableModel
对象创建一个新的数据记录,并将其添加到数据库中。以下是一个使用QSqlTableModel
对象插入数据的示例:
from PyQt5.QtCore import Qt, QModelIndex
from PyQt5.QtSql import QSqlTableModel
# 插入数据
def insertData():
model = QSqlTableModel() # 创建一个表格模型
model.setTable("person") # 指定表格名
model.select() # 查询数据
rowCount = model.rowCount() # 获取当前数据行数
model.insertRows(rowCount, 1) # 插入一行新的数据
model.setData(model.index(rowCount, 0), rowCount+1) # 设置id
model.setData(model.index(rowCount, 1), "Bob") # 设置name
model.submitAll() # 提交数据
在上述示例中,我们首先创建了一个QSqlTableModel
对象,并使用model.insertRows()
方法插入了一行新的数据。接着,我们使用model.setData()
方法设置了新行的数据内容,并使用model.submitAll()
方法提交了新行的数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 QtSql – Python - Python技术站