当前位置: 首页 > wzjs >正文

苏州教育平台网站建设百度关键词搜索量

苏州教育平台网站建设,百度关键词搜索量,win7 iis 默认网站,wordpress子主题空白PyQt学习系列笔记(Python Qt框架) 第七课:PyQt的数据库操作与ORM集成 一、PyQt数据库操作概述 1.1 为什么需要数据库操作? 在现代桌面应用程序中,数据持久化是核心需求。PyQt通过QtSql模块提供了对多种数据库的完整…

PyQt学习系列笔记(Python Qt框架)

第七课:PyQt的数据库操作与ORM集成


一、PyQt数据库操作概述

1.1 为什么需要数据库操作?

在现代桌面应用程序中,数据持久化是核心需求。PyQt通过QtSql模块提供了对多种数据库的完整支持(如SQLite、MySQL、PostgreSQL),并结合ORM框架(如SQLAlchemy、Django ORM)可实现高效的数据管理。

核心目标

  1. 连接数据库(SQLite、MySQL、PostgreSQL等)。
  2. 执行SQL语句(增删改查)。
  3. 使用数据模型类QSqlTableModelQSqlRelationalTableModel)。
  4. 集成ORM框架(SQLAlchemy、Django ORM)。

二、PyQt数据库操作基础

2.1 核心类与模块

PyQt的QtSql模块提供了以下关键类:

类名功能
QSqlDatabase管理数据库连接(添加驱动、打开/关闭连接)。
QSqlQuery执行SQL语句(查询、插入、更新、删除)。
QSqlTableModel将数据库表映射为表格模型,支持增删改查。
QSqlRecord表示数据库中的一行记录。

三、数据库连接

3.1 SQLite数据库连接

SQLite是轻量级嵌入式数据库,适合小型应用。

示例:连接SQLite数据库

from PyQt5.QtSql import QSqlDatabase, QSqlQuerydef connect_sqlite():db = QSqlDatabase.addDatabase("QSQLITE")db.setDatabaseName("example.db")  # 数据库文件名if not db.open():print("无法打开数据库连接")return Falseprint("成功连接到SQLite数据库")return True

3.2 MySQL数据库连接

MySQL适合需要高并发和复杂查询的场景。

示例:连接MySQL数据库

def connect_mysql():db = QSqlDatabase.addDatabase("QMYSQL")db.setHostName("localhost")       # 主机地址db.setDatabaseName("mydatabase")  # 数据库名db.setUserName("username")        # 用户名db.setPassword("password")        # 密码if not db.open():print("无法打开MySQL数据库连接")return Falseprint("成功连接到MySQL数据库")return True

四、基本数据库操作(CRUD)

4.1 创建表

使用QSqlQuery执行SQL语句创建表。

示例:创建用户表

def create_table():query = QSqlQuery()sql = """CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,age INTEGER)"""if not query.exec_(sql):print("创建表失败:", query.lastError().text())else:print("表创建成功")

4.2 插入数据

使用QSqlQuery插入数据。

示例:插入用户数据

def insert_user(name, age):query = QSqlQuery()sql = "INSERT INTO users (name, age) VALUES (?, ?)"query.prepare(sql)query.addBindValue(name)query.addBindValue(age)if query.exec_():print(f"用户 {name} 插入成功")else:print("插入数据失败:", query.lastError().text())

4.3 查询数据

使用QSqlQuery查询数据。

示例:查询所有用户

def select_users():query = QSqlQuery()query.exec_("SELECT * FROM users")while query.next():user_id = query.value(0)name = query.value(1)age = query.value(2)print(f"ID: {user_id}, Name: {name}, Age: {age}")

4.4 更新和删除数据

更新和删除操作通过SQL语句实现。

示例:更新用户年龄

def update_user_age(name, new_age):query = QSqlQuery()sql = "UPDATE users SET age = ? WHERE name = ?"query.prepare(sql)query.addBindValue(new_age)query.addBindValue(name)if query.exec_():print(f"用户 {name} 年龄更新成功")else:print("更新数据失败:", query.lastError().text())

示例:删除用户

def delete_user(name):query = QSqlQuery()sql = "DELETE FROM users WHERE name = ?"query.prepare(sql)query.addBindValue(name)if query.exec_():print(f"用户 {name} 删除成功")else:print("删除数据失败:", query.lastError().text())

五、使用QSqlTableModel操作数据库

5.1 显示数据到表格

QSqlTableModel将数据库表映射为表格模型,适合与QTableView结合使用。

示例:显示用户表

from PyQt5.QtWidgets import QTableView
from PyQt5.QtSql import QSqlTableModeldef show_table():model = QSqlTableModel(db=QSqlDatabase.database())model.setTable("users")model.select()  # 加载数据view = QTableView()view.setModel(model)view.resizeColumnsToContents()view.show()

5.2 编辑数据

通过QSqlTableModel可以直接编辑表格中的数据。

示例:允许用户编辑数据

model.setEditStrategy(QSqlTableModel.OnFieldChange)  # 实时保存更改
view.setModel(model)
view.show()

六、ORM框架集成

6.1 SQLAlchemy集成

SQLAlchemy是Python中流行的ORM框架,支持多种数据库。

示例:使用SQLAlchemy定义模型

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmakerBase = declarative_base()class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String(50))age = Column(Integer)# 创建数据库连接
engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()

示例:通过ORM操作数据

# 插入数据
new_user = User(name='Alice', age=25)
session.add(new_user)
session.commit()# 查询数据
users = session.query(User).all()
for user in users:print(f"ID: {user.id}, Name: {user.name}, Age: {user.age}")

6.2 Django ORM集成

Django ORM通过模型类定义数据结构,并与PyQt结合实现数据展示。

示例:Django模型定义

from django.db import modelsclass User(models.Model):name = models.CharField(max_length=100)gender = models.CharField(max_length=10)remark_mobiles = models.CharField(max_length=20)corp_name = models.CharField(max_length=100)add_time = models.DateTimeField(auto_now_add=True)

示例:在PyQt中加载Django模型数据

# 假设Django模型已初始化
from myapp.models import Userdef load_data_to_table():users = User.objects.all()for user in users:# 将数据填充到QTableWidget中row_position = self.tableWidget.rowCount()self.tableWidget.insertRow(row_position)self.tableWidget.setItem(row_position, 0, QTableWidgetItem(user.name))self.tableWidget.setItem(row_position, 1, QTableWidgetItem(user.gender))

七、高级数据库功能

7.1 分页与搜索

通过QSqlTableModel实现分页和搜索功能。

示例:分页显示数据

model.setFilter("id > 0")  # 设置过滤条件
model.setSort(0, Qt.AscendingOrder)  # 按ID升序排序
model.select()

示例:搜索特定用户

model.setFilter(f"name LIKE '%{search_text}%'")
model.select()

7.2 事务处理

事务确保多个操作的原子性。

示例:使用事务

db.transaction()
try:query.exec_("UPDATE users SET age = 30 WHERE name = 'Alice'")query.exec_("INSERT INTO users (name, age) VALUES ('Bob', 28)")db.commit()
except:db.rollback()print("事务回滚")

八、常见问题与解决方案

8.1 数据库连接失败

原因:数据库文件不存在、驱动不支持、密码错误。
解决方法

  • 检查数据库路径是否正确。
  • 确保安装了对应数据库驱动(如MySQL驱动需安装mysqlclient)。

8.2 SQL语句报错

原因:SQL语法错误或字段名拼写错误。
解决方法

  • 使用query.lastError().text()获取错误信息。
  • 通过打印SQL语句调试(如print(query.lastQuery()))。

8.3 ORM模型映射问题

原因:ORM模型与数据库表结构不一致。
解决方法

  • 确保ORM模型的字段与数据库表匹配。
  • 使用Base.metadata.create_all(engine)自动创建表。

九、总结与下一步

本节课重点讲解了PyQt的数据库操作与ORM集成,包括:

  1. 数据库连接:SQLite、MySQL、PostgreSQL的支持。
  2. 基本CRUD操作:使用QSqlQuery执行SQL语句。
  3. 数据模型类QSqlTableModel实现表格数据绑定。
  4. ORM集成:SQLAlchemy和Django ORM的使用。
  5. 高级功能:分页、搜索、事务处理。

下节课预告
第八课将深入讲解PyQt的多线程与异步编程,包括QThreadQThreadPoolasyncio的集成,以及如何避免UI卡顿。请持续关注后续内容!


参考资料

  1. PyQt官方文档 - Database
  2. CSDN PyQt5数据库操作教程
  3. SQLAlchemy官方文档

文章转载自:

http://gPV45AAU.bhqLj.cn
http://CzAHSHUH.bhqLj.cn
http://B2U2I1h6.bhqLj.cn
http://h4HvsdxZ.bhqLj.cn
http://7AxUubVK.bhqLj.cn
http://xVusTSzi.bhqLj.cn
http://6wNdBneG.bhqLj.cn
http://k5VE79Ap.bhqLj.cn
http://hwrO6KiK.bhqLj.cn
http://hNUbCb06.bhqLj.cn
http://JhGHbJya.bhqLj.cn
http://kSRPGW3G.bhqLj.cn
http://BANREheY.bhqLj.cn
http://tTLGXXBw.bhqLj.cn
http://ZCS0ah5D.bhqLj.cn
http://pTohkoxn.bhqLj.cn
http://UdbKOPsL.bhqLj.cn
http://IxBYwB9v.bhqLj.cn
http://N32ykrJZ.bhqLj.cn
http://6A5iwSLT.bhqLj.cn
http://aTQm6qBa.bhqLj.cn
http://hqD46JM5.bhqLj.cn
http://MlCBDeOP.bhqLj.cn
http://PBCrpWjQ.bhqLj.cn
http://k5GRdY0C.bhqLj.cn
http://IWptiUM0.bhqLj.cn
http://y1kivJd0.bhqLj.cn
http://4EP9a5fP.bhqLj.cn
http://4EnXb2E9.bhqLj.cn
http://uzyfl4b3.bhqLj.cn
http://www.dtcms.com/wzjs/778654.html

相关文章:

  • 旅游网站建设的论文给小孩做辅食的网站
  • 有网站了小程序怎么做wordpress博客转发
  • 做一个网站的费用便宜网站建设公司
  • 2015做那些网站致富网站建设方案的含义
  • 买空间做网站宣传片拍摄制作多少钱
  • 网站模板演示网站推广的目的是什么
  • 苏州行业网站建设怎么做五个页面网站
  • 江苏建设人才网站wordpress适合外贸站
  • 备份wordpress网站自己做的网站如何兼容
  • 如何用eclipse做网站网络公司是什么行业
  • 医疗网站建设公司哪家好做网站有关机械的图片
  • 什么是网站平台开发网站建设中是因为没有ftp上传吗
  • 做网站用什么配资电脑沉默是金粤语谐音歌词
  • 住房和城乡建设部标准定额网站在线制作照片
  • 网站建设:宏智网络科技孝感网站建设
  • net网站开发视频西安建网站的公司
  • 游戏网站设计模板大淘客网站如何做seo
  • 视频在线直播网站建设网站开发技术有什么
  • 湖南住房与城乡建设部网站虚拟主机是指什么
  • 网站制作编辑软件申请网站域名空间
  • 广州网站建设是什么意思公司网站建设小知识
  • wdlinux 默认网站手机建站永久免费软件
  • wordpress你访问的网站不存在小7手游官网下载
  • 怎么建立网站卖东西成都企业网站建站
  • 网站的功能包括哪些画家个人网站建设
  • asp access网站架设教程网站后台登陆代码
  • 网站搭建教程wordpress 翻页错误
  • 服装网站建设物流配送系统江苏高端品牌网站建设
  • 义乌设计网站建设银行网站怎么下载地址
  • 襄阳网站建设兼职广告营销策划公司