发布网友 发布时间:2024-10-23 19:09
共1个回答
热心网友 时间:2024-11-15 14:22
这期内容是关于PyQt5与数据库互联的最终篇章,着重于主程序构建。
在实现中,我们将运用两个关键类:QSqlDatabase类和QSqlQuery类。QSqlDatabase类主要负责数据库连接,而QSqlQuery类则用于数据库查询操作。
QSqlDatabase类通过提供一个接口,允许您使用支持的数据库驱动程序访问数据库。每个QSqlDatabase实例代表一个数据库连接,其通过特定驱动程序提供访问。
可用数据库类型包括但不限于PostgreSQL、SQLite等。要创建连接,可调用QSqlDatabase的addDatabase()函数,并指定要使用的驱动程序类型或名称,以及连接名称。若不指定连接名称,将使用默认连接。
创建数据库连接后,可通过设置连接参数(如数据库名称、用户名、密码、主机名、端口和连接选项)并调用open()函数来激活物理连接。默认情况下,未命名的连接是默认连接。获取连接时,需使用连接名称,或通过调用database()函数以默认连接。
QSqlDatabase为值类,允许在多个实例间共享连接设置。为了正确清除实例,避免未定义行为,应避免将QSqlDatabase成员变量长期保留,而应通过调用database()访问当前连接。
若需要创建多个连接,为每个连接指定唯一名称,并使用带有连接名称的database()函数获取特定连接。通过removeDatabase()与连接名称结合使用可删除连接,确保不会干扰其他引用的连接实例。
QSqlQuery类封装了执行SQL查询的功能,支持DML(数据操作语言)语句(如SELECT、INSERT、UPDATE、DELETE)和DDL(数据定义语言)语句(如CREATE TABLE)。对于特定数据库的命令,如PostgreSQL的SET DATESTYLE = ISO,QSqlQuery也提供支持。
成功执行SQL语句后,查询状态变为活动状态,使isActive()函数返回True。导航和检索数据前,确保查询处于活动状态并使用isValid()验证。通过特定函数(如next()、previous()、first()、last()和seek())可向前、后、指定位置移动查询结果。
执行查询时,若结果当前处于有效位置,则可使用value()函数访问数据,返回值为QVariant对象。通过调用select()函数填充模型数据,同时利用lastError()检索错误信息。若已有数据填充模型,调用select()时会使用新过滤器重新选择数据;否则,将在下次调用时应用过滤器。
核心代码中,我们首先创建数据库连接并尝试打开,通过检查open()返回值判断连接状态。接着,对数据库和数据模型进行配置,包括选择要显示的视图模型、设置数据编辑策略、设置表头内容以及处理特定字段的隐藏需求。
使用QSqlQuery的select()函数填充模型数据,并根据过滤器重新选择数据。隐藏不必要的字段,确保界面简洁。设置右键菜单以直接连接到删除行函数,实现数据的高效管理。获取选定模型项的索引列表,并去重以精确删除重复行。单击表格以获取行号,进一步访问和操作数据。
通过设置过滤器,可对数据库表数据进行筛选,确保展示的信息符合特定条件。如果模型已填充数据,应用新过滤器重新选择数据;若未填充,则在下次调用时应用过滤器。
通过这些步骤,我们构建了一个基本的PyQt5与数据库互联的主程序,实现了数据的查询、显示、过滤和管理功能。在开发过程中,确保遵循最佳实践,如避免内存泄漏和正确处理错误信息,以构建稳定可靠的软件。