网站首页 > 技术文章 正文
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等。
Qt中SQL模块类
SQL模块中的类包括:
- QSQL:包含整个Qt SQL模块中使用的各种标识符。
- QSqlDatabase:处理与数据库的连接。
- QSqlDriver:用于访问特定SQL数据库的抽象基类。
- QSqlDriverCreator:模板类,为特定驱动程序类型提供SQL驱动程序工厂类。
- QSqlDriverCreatorBase:SQL驱动程序工厂类的基类。
- QSqlError:SQL数据库错误信息。
- QSqlField:处理SQL数据库表和视图中的字段。
- QSqlIndex:用于操作和描述数据库索引的函数。
- QSqlQuery:执行和操作SQL语句的方法。
- QSqlQueryModel:SQL结果集的只读数据模型。
- QSqlRecord:封装数据库记录。
- QSqlRelationalTableModel:具有外键支持的单个数据库表的可编辑数据模型。
- QSqlResult:用于从特定SQL数据库访问数据的抽象接口。
- QSqlTableModel:单个数据库表的可编辑数据模型。
Qt中可用SQL数据库
QSqlDatabase类用于连接数据库,可以使用数据库驱动与不同的数据库进行交互,一个QSqlDatabase实例代表一次数据库连接。可支持数据库驱动如下:
- QDB2: IBM DB2驱动程序。
- QMYSQL: MySQL驱动程序。
- QOCI: Oracle调用接口驱动程序。
- QODBC: ODBC驱动程序(包括MS SQL Server)。
- QPSQL: PostgreSQL驱动程序。
- QSQLITE: SQLite3驱动程序。
- QSQLITE2: SQLite2驱动程序。
QSqlDatabase类的常用方法
- 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):关闭数据库连接。
测试
使用QSqlDatabase.addDatabase()添加一个数据库, 将数据的名称设置为(':memory:')表示在内存在建立的一个临时数据库。然后创建一个名称为'person'的个人信息表,并添加一个人信息,然后是有QTableView显示出来。 完整代码如下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from 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 False
query = 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())
运行结果如下图:
本文知识点
- QtSql子模块对SQL的支持。
- 创建一个简单的数据库并显示它。
猜你喜欢
- 2024-11-13 Java反射之实例构造 通俗理解java反射举例子
你 发表评论:
欢迎- 614℃几个Oracle空值处理函数 oracle处理null值的函数
- 605℃Oracle分析函数之Lag和Lead()使用
- 593℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 591℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 585℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 579℃【数据统计分析】详解Oracle分组函数之CUBE
- 568℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 559℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- PageHelper - 最方便的 MyBatis 分页插件
- 面试二:pagehelper是怎么实现分页的,
- MyBatis如何实现分页查询?(mybatis-plus分页查询)
- SpringBoot 各种分页查询方式详解(全网最全)
- 如何在Linux上运行exe文件,怎么用linux运行windows软件
- 快速了解hive(快速了解美国50个州)
- Python 中的 pyodbc 库(pydbclib)
- Linux搭建Weblogic集群(linux weblogic部署项目步骤)
- 「DM专栏」DMDSC共享集群之部署(一)——共享存储配置
- 故障分析 | MySQL 派生表优化(mysql pipe)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)