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

芜湖网站推广企业公司建设网站

芜湖网站推广,企业公司建设网站,如何注册个人营业执照,网站上怎么做通栏的图片简介网上关于Qt访问数据库的资料大多使用QSqlDatabase模块。虽然这在C中尚可接受,但在Python中使用就显得过于繁琐了——不仅要手动编写SQL语句,还与Python追求简洁的理念背道而驰。在这里写一个基于sqlalchemy的示例,也可以使用其他的ORM库 …

简介

网上关于Qt访问数据库的资料大多使用QSqlDatabase模块。虽然这在C++中尚可接受,但在Python中使用就显得过于繁琐了——不仅要手动编写SQL语句,还与Python追求简洁的理念背道而驰。

在这里写一个基于sqlalchemy的示例,也可以使用其他的ORM

sql_thread.py

# coding: utf-8
from collections import deque
from typing import Callablefrom PySide6.QtCore import QObject, Signal, QThread
from sqlalchemy.orm import Sessionclass SqlRequest:""" Sql request """def __init__(self, func: Callable, slot: Callable = None, params: dict = None):self.func = funcself.slot = slotself.params = params or {}class SqlResponse:""" Sql的反应 """def __init__(self, data: object, slot: Callable = None):self.slot = slotself.data = dataclass SqlSignalBus(QObject):""" Sql信号总线 """fetchDataSig = Signal(SqlRequest)dataFetched = Signal(SqlResponse)sqlSignalBus = SqlSignalBus()def sqlRequest(func: Callable, slot=None, **params):""" 从数据库查询 SQL 数据 """request = SqlRequest(func, slot, params)sqlSignalBus.fetchDataSig.emit(request)class DatabaseThread(QThread):def __init__(self, parent=None):super().__init__(parent=parent)self.server = Noneself.tasks = deque()sqlSignalBus.fetchDataSig.connect(self.onFetchData)def run(self):func, args, kwargs = self.serverserver: Session = func(*args, **kwargs)while self.tasks:request: SqlRequest = self.tasks.popleft()result = request.func(**request.params, server=server)sqlSignalBus.dataFetched.emit(SqlResponse(result, request.slot))server.close()def setServer(self, func: Callable, *args, **kwargs):self.server = (func, args, kwargs)def onFetchData(self, request: SqlRequest):self.tasks.append(request)if not self.isRunning():self.start()

db.py

# coding: utf-8
from random import randint, choicefrom sqlalchemy import Column, Integer, String
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, Sessionengine = create_engine('sqlite:///test.db')
Base = declarative_base()def create_session():return sessionmaker(bind=engine)()def init_create_table() -> None:Base.metadata.create_all(bind=engine, checkfirst=True)class User(Base):# 表的名字:__tablename__ = 'user'# 表的结构:id = Column(Integer, autoincrement=True, primary_key=True, comment='用户ID')name = Column(String(20))age = Column(Integer)phone = Column(String(20))email = Column(String(50))sex = Column(String(10))def __repr__(self):return f"User(id={self.id}, name={self.name}, age={self.age}, phone={self.phone}, email={self.email}, sex={self.sex})"def add_user(server: Session):server.add(User(name=f'Tom-{randint(1, 100)}', age=randint(1, 100), phone=str(randint(10000000, 99999999)),email='tom@123.com',sex=choice(['male', 'female'])))server.commit()def select_user(server: Session):users = server.query(User).all()return users

demo.py

# coding: utf-8
import sysfrom PySide6.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayoutfrom db import create_session, User, add_user, select_user, init_create_table
from sql_thread import sqlSignalBus, SqlResponse, DatabaseThread, sqlRequestclass MainWindow(QWidget):def __init__(self):super().__init__()self.setWindowTitle("Sql Thread Example")self.horizontalLayout = QHBoxLayout(self)self.addUserButton = QPushButton("Add User", self)self.selectUserButton = QPushButton("Select User", self)self.horizontalLayout.addWidget(self.addUserButton)self.horizontalLayout.addWidget(self.selectUserButton)self.resize(400, 300)self.databaseThread = DatabaseThread(self)self.databaseThread.setServer(create_session)sqlSignalBus.dataFetched.connect(self.onDataFetched)self.addUserButton.clicked.connect(lambda: sqlRequest(add_user))self.selectUserButton.clicked.connect(lambda: sqlRequest(select_user, self.onSelectUser))def onSelectUser(self, users: list[User]):print(users)def onDataFetched(self, response: SqlResponse):if response.slot:response.slot(response.data)if __name__ == '__main__':app = QApplication(sys.argv)init_create_table()mainWindow = MainWindow()mainWindow.show()sys.exit(app.exec())

在这里插入图片描述

http://www.dtcms.com/wzjs/552190.html

相关文章:

  • 郑州外贸网站建设定制建设网站
  • 百度做个公司网站要多少钱wordpress怎么上传网站
  • 河北邯郸的最新通告搜索引擎关键词优化
  • 企业网站设计说明微网站后台内容设置
  • 做网站数据库及相关配置模板网站试用
  • 网站分析模板宣传片制作合同范本
  • 网站建设的扩展阶段包括质感设计网站
  • 慈溪建设集团网站百度竞价推广计划
  • 淘宝网站建设特点洛阳网站建设制作多少钱
  • 网站正在建设中 英文wordpress分页分类导航插件
  • 网上招聘网站开发报告濮阳市网站怎么做宣传
  • 网站优化报价图片编辑器在线网页版
  • 海门市住房和城乡建设局网站网站添加字体
  • 甘肃省建设厅官方网站张睿企业网站做电脑营销
  • 农业公园网站建设网页设计教程答案
  • 微信游戏网站源码怎么做九龙坡区网站建设
  • 做同款的网站进度插件 wordpress
  • 古风网站建设模板网站建设域名多少钱
  • 内江网站制作百度推广业务员电话
  • 宿州网站建设开发公司上海娱乐场所关门
  • 如何做网站站内搜索代码连云港公司网站优化服务
  • 亚洲成成品网站有线高德地图不显示菲律宾
  • 建站行业发展前景什么语言网站比较安全
  • 朝阳专业网站建设公司整套网站模板
  • 网站备案流程详解wordpress本地图片不显示图片
  • 成都专业网站制作企业信用信息查询公示系统天津
  • 装修公司做宣传在哪个网站公司网站赏析
  • 怎么搞免费的网站上海网站制作福州
  • 网站后台程序下载烟台网站推广广州公司
  • 西安谁家的集团门户网站建设比较好阜宁县网站建设