python+PYQT5写了一个小工具,运行效率无法忍受,求大神指点
本帖最后由 guardianpeak 于 2020-8-24 21:44 编辑#### 求助描述与问题:
- 数据读取速度很正常(可在access_select模块中单独测试),但是在循环写入时会耗费很长时间,目前数据库中只有几百条数据,经测试需要10秒左右才能展现出来
- 真正使用的数据库是sqlserver,正常查询时可能会有上万条数据,自己测试过16列4000行数据的情况需要近一个小时才会展示出数据,毫无可用性。
- 目前不知道是PYQT5的问题还是可以有更好的写入方法,求大神给予帮助
具体描述与代码在附件中 本帖最后由 hrp 于 2020-8-24 20:25 编辑
写入数据关QT5什么事?你是说在QT5界面显示文本? hrp 发表于 2020-8-24 20:23
写入数据关QT5什么事?你是说在QT5界面显示文本?
是的,我读出数据库的数据,展示在QT的表格控件中 还没跑你的程序,个人觉得,和你的那1.6M的.py文件有关系吧,不能把里面的文本内容单独存放然后打开吗... guardianpeak 发表于 2020-8-24 20:44
是的,我读出数据库的数据,展示在QT的表格控件中
QT5的效率再差也不会这么慢的,检查一下你的代码逻辑吧。我看到你的压缩包有点大不敢看了。{:10_250:} xiaochuan8264 发表于 2020-8-24 21:00
还没跑你的程序,个人觉得,和你的那1.6M的.py文件有关系吧,不能把里面的文本内容单独存放然后打开吗...
那个是资源文件,其实可以不需要的,倒是没啥,改下界面里的代码就能整个去掉,理论上不是影响速度的因素
hrp 发表于 2020-8-24 21:08
QT5的效率再差也不会这么慢的,检查一下你的代码逻辑吧。我看到你的压缩包有点大不敢看了。
压缩包大是因为有一个Access文件和一个资源文件在里面,资源文件可以干掉,Access应该不影响吧 资源文件已经干掉了,现在没有资源文件,代码也不长啊,主要就是一个循环SET耗时太多,实在不知道该怎么优化了 本帖最后由 hrp 于 2020-8-24 23:12 编辑
guardianpeak 发表于 2020-8-24 21:45
资源文件已经干掉了,现在没有资源文件,代码也不长啊,主要就是一个循环SET耗时太多,实在不知道该怎么优 ...
应该是重复运行 table_item.select_access() 方法导致的,我没有测试环境,也不怎么会数据库,随手改了一下,你试试。
table_pane.py 文件
from PyQt5.Qt import *
from table import Ui_Form
from access_select import Select_Table
import sys
class tablepane(QWidget, Ui_Form):
table_close_signal = pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
# 发射自定义关闭按钮的信号
def table_close(self):
self.table_close_signal.emit()
# 原定发射信号由MAIN模块来处理,后决定并入本模块自行处理
# def table_show(self):
# self.table_show_signal.emit()
# 本模块自行处理表格展示的函数
def table_show(self):
# 实例化关联数据库的Select_Table类
table_item = Select_Table()
# 获取查询结果的列与行数
lst = table_item.select_access()
column = len(lst)
row = len(lst)
# 建立行数
self.tableWidget.setRowCount(row)
# 循环写入表内数据
for i in range(row):
for j in range(column):
self.tableWidget.setItem(i, j, QTableWidgetItem(str(lst)))
# 关闭数据连接
table_item.close_odbc()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = tablepane()
window.show()
sys.exit(app.exec_())
hrp 发表于 2020-8-24 23:00
应该是重复运行 table_item.select_access() 方法导致的,我没有测试环境,也不怎么会数据库,随手改了 ...
非常感谢,又学到了,就是这个问题,以后这种问题还真得注意了 guardianpeak 发表于 2020-8-25 09:00
非常感谢,又学到了,就是这个问题,以后这种问题还真得注意了
这个问题算是比较明显的了,那个方法的作用是连接数据库、读取、关闭,而连接数据库的耗时是比较长的。你原来的写法每设置一个表格位置就要连接一次数据库,速度之慢可想而知,而且是没有必要从数据库重复获取同样的数据的。{:10_266:} guardianpeak 发表于 2020-8-25 09:00
非常感谢,又学到了,就是这个问题,以后这种问题还真得注意了
楼主加个好友吧,我刚开始学pyqt,也是结合access使用。
网上找access的资源太少了 rsj0315 发表于 2020-11-17 13:58
楼主加个好友吧,我刚开始学pyqt,也是结合access使用。
网上找access的资源太少了
sqlite比access更实用些 rsj0315 发表于 2020-11-17 13:58
楼主加个好友吧,我刚开始学pyqt,也是结合access使用。
网上找access的资源太少了
数据库无所谓的,我用access只是因为简单,微软系的。跟QT学习没太大关系
页:
[1]