有一次,我的应用程序查询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列的simpe表。然而,身体有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,一切正常,没有冻结,没有任何东西。
我将添加您可能需要的任何其他信息。谢谢你的阅读。