实战PyQt5: 129-SQL数据库操作
文章插图
【实战PyQt5: 129-SQL数据库操作】Qt平台对SQL编程有着良好的支持 , QtSql子模块提供对SQL数据库的支持 。
Qt中SQL数据库模块简介QtSql模块包含了多个类 , 这些类大致可以分为三个部分:
- 驱动层 , 用于提供特定数据库与SQL API接口之间的低级连接功能;其中包括QSqlDriver、QSqlDriverCreatorBase、QSqlResult;
- SQL API层 , 用于提供对数据库的访问 。 通常来说 , 我们会使用QSqlDatabase建立数据库连接 , 使用QSqlQuery等类实现数据库的交互(执行SQL语句) 。 此外还有QSqlError、QSqlField、QSqlIndex、QSqlRecord等类;
- 用户界面操作层 , 用于将数据库操作的数据链接到PyQt相应的数据部件 , 将数据和操作展示在Qt界面中 。 这些类包括:QSqlQueryModel、QSqlTableModel和QSqlRelationTableModel等 。
- QSQL:包含整个Qt SQL模块中使用的各种标识符 。
- QSqlDatabase:处理与数据库的连接 。
- QSqlDriver:用于访问特定SQL数据库的抽象基类 。
- QSqlDriverCreator:模板类 , 为特定驱动程序类型提供SQL驱动程序工厂类 。
- QSqlDriverCreatorBase:SQL驱动程序工厂类的基类 。
- QSqlError:SQL数据库错误信息 。
- QSqlField:处理SQL数据库表和视图中的字段 。
- QSqlIndex:用于操作和描述数据库索引的函数 。
- QSqlQuery:执行和操作SQL语句的方法 。
- QSqlQueryModel:SQL结果集的只读数据模型 。
- QSqlRecord:封装数据库记录 。
- QSqlRelationalTableModel:具有外键支持的单个数据库表的可编辑数据模型 。
- QSqlResult:用于从特定SQL数据库访问数据的抽象接口 。
- QSqlTableModel:单个数据库表的可编辑数据模型 。
- QDB2: IBM DB2驱动程序 。
- QMYSQL: MySQL驱动程序 。
- QOCI: Oracle调用接口驱动程序 。
- QODBC: ODBC驱动程序(包括MS SQL Server) 。
- QPSQL: PostgreSQL驱动程序 。
- QSQLITE: SQLite3驱动程序 。
- QSQLITE2: SQLite2驱动程序 。
- addDataBase(): 静态函数 , 设置连接数据库的数据库驱动类型 。
- open(self): 打开数据连接 。
- setDatabaseName(self, name: str):设置所连接的数据库名称 。
- setHostName(self, host: str):设置数据库所在的主机名称 。
- setUserName(self, name :str):指定连接的用户名 。
- setPassword(self, password: str):设置连接对象的密码 。
- commit(self):提交事务 , 如果执行成功返回True 。
- rollback(self):回滚数据库事务 。
- close(self):关闭数据库连接 。
import sysfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtCore import Qtfrom PyQt5.QtWidgets import (QApplication, QMessageBox, QTableView)from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel def createConnection():db = QSqlDatabase.addDatabase('QSQLITE')db.setDatabaseName(':memory:')if not db.open():QMessageBox.critical(None, '不能打开数据库','不能建立数据库连接, 这个例子需要SQLit支持\n''要获取如何建立数据库连接 , 请参考Qt SQL技术文档\n\n''点击Cancel按钮退出',QMessageBox.Cancel)return Falsequery = QSqlQuery()query.exec("create table person(id int primary key, name varchar(20), address varchar(30))")query.exec("insert into person values(101, '李世民', '西安')")query.exec("insert into person values(102, '赵匡胤', '开封')")query.exec("insert into person values(103, '朱元璋', '南京')")return True class DemoSQL(QTableView):def __init__(self, parent=None):super(DemoSQL, self).__init__(parent)# 设置窗口标题self.setWindowTitle('实战 Qt for Python: SQL数据库演示')# 设置窗口大小self.resize(400, 300)model = QSqlTableModel()model.setTable('person')model.setEditStrategy(QSqlTableModel.OnManualSubmit)model.select()model.setHeaderData(0, Qt.Horizontal, '编号')model.setHeaderData(1, Qt.Horizontal, '姓名')model.setHeaderData(2, Qt.Horizontal, '地址')self.setModel(model)if __name__ == '__main__':app = QApplication(sys.argv)if not createConnection():sys.exit(1)window = DemoSQL()window.show()sys.exit(app.exec())
- Wireshark数据包分析实战:TCP报文段重组
- Python爬虫采集网易云音乐热评实战
- Django实战016:django中使用redis详解
- HTTP实战之Wireshark抓包分析
- Wireshark数据包分析实战:网卡卸载
- Python数据分析:数据可视化实战教程
- 实战经验:电商平台遭遇CC攻击,我们是如何应对的?
- Tencent IN对话 | 八位互联网实战家,实战智慧营销商学院
- HLS实战之Wireshark抓包分析
- Vue实战091:Vue项目部署到nginx服务器