1

有一次,我的应用程序查询 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,一切正常,没有冻结,什么都没有。

我将添加您可能需要的任何其他信息。感谢您的阅读。

4

0 回答 0