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

wordpress网站导航seo对网络推广的作用是什么?

wordpress网站导航,seo对网络推广的作用是什么?,怎么制作游戏 需要什么软件,简单个人网站制作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://www.dtcms.com/wzjs/477280.html

相关文章:

  • 泗阳做网站公司企业网站seo推广方案
  • 专门做特卖的网站在线外链工具
  • 重庆企业网站排名优化域名注册服务网站
  • 网站源代码 php专业网络推广公司排名
  • 怎样做好公司网站如何建立个人网址
  • 网站建设流程中哪些部分比较重要今日国内新闻重大事件
  • 深圳市高端网站建设深圳网站优化培训
  • 做网站 指导卢松松外链工具
  • 南通做网站推广的公司天眼查询个人
  • 金华市开发区人才网seo技术中心
  • 免费h5制作app平台网站关键词优化代理
  • 怎么看网站做没做推广创建个人网站的流程
  • 网站功能设计讲解深圳网站建设推广优化公司
  • 17网站一起做网店广常见的网站推广方法
  • 重庆网站建设是什么成都seo技术
  • 住房城乡建设部网站诚信平台互联网搜索引擎
  • 交通部的建设标准网站关键词排名怎么上首页
  • 做网站 需求seo顾问赚钱吗
  • 四川网站建设套餐seo专业培训课程
  • 网站备案需要把网站做好吗十大放黄不登录不收费
  • 做t恤的网站百度指数首页
  • 宜昌网站建设开发费用网页设计制作教程
  • 网站建设优化公司排名深圳推广公司推荐
  • 门户网站系统程序企业网站制作开发
  • 使用vue做的网站购物网站排名
  • 为什么网站开发要用架构建站流程主要有哪些
  • 黑龙江省住房和建设厅网站抖音seo排名系统哪个好用
  • 空包网站怎么做百度推广托管公司
  • 帮别人做网站多少钱公司网站模板设计
  • 吉林省城乡住房建设厅网站seo工资服务