有一次,我的应用程序查询 MySQL 数据库,并使用以下代码获取 300 行:
cur.execute('''
select
ime, brPredmeta, statusStr, sudskiBr, sudija,
datumRasprave,statusPredmeta, zaduzen,datumZaduzenja
from predmeti
order by ime
''')
for row in cur: #extract data from variables
ime, brPredmeta, statusStr, sudskiBr, sudija, datumRasprave, statusPredmeta, zaduzen, datumZaduzenja = row
print(row)
几乎立即在控制台窗口中显示元组。数据提取后,我使用简单的 HTML 创建了 3 个部分的 PDF 页面;页眉、正文和页脚。所有 3 个都是具有 8-10 列的简单表。然而,正文有 300 行,因为我像这样附加它们:
#we are still in FOR LOOP that iterates rows in cursor
body = ('<html><head><title></title>'
'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>'
'<style></style>'
'</head>'
'<body>'
'<table align ="center" border="0" width="100%" style="table-layout:fixed">'
'<tr height="10%">'
'<td align="left" width="20">'+str(brojac)+'.</td>'
'<td align="left" width="180">'+ime+'</td>'
'<td align="left" width="100">'+str(brPredmeta)+'</td>'
'<td align="left" width="80">'+statusStr+'</td>'
'<td align="left" width="80">'+str(sudskiBr)+'</td>'
'<td align="left" width="140">'+sudija+'</td>'
'<td align="left" width="150">'+zaduzen+'</td>'
'<td align="left">'+datumZaduzenja+'</td>'
'<td align="right"> '+statusPredmeta+' </td>'
'</tr>')
self.ui.printHTML.append(body)
这个完全相同的代码在 SQLite 上运行顺利。由于我今天切换到 MySQL,它只是冻结了我的整个程序。CPU 达到 100%(4 核 i3)并且 RAM 使用量超过 100MB(从启动时的 24MB)。一分钟后,我终止了该过程。
当我将此函数与其他参数(查询略有不同)一起使用时,这些参数会产生更少的行(从 60 到 120),一切都很顺利。
如果我跳过“打印预览”对话框,直接打印 PDF,一切正常,没有冻结,什么都没有。
我将添加您可能需要的任何其他信息。感谢您的阅读。