【问题标题】:pywintypes.com_error: (-2147024882, 'Not enough memory resources are available to complete this operation.', None, None)pywintypes.com_error: (-2147024882, '没有足够的内存资源来完成此操作。', None, None)
【发布时间】:2019-01-13 14:02:37
【问题描述】:

当我尝试使用 pythons pywin32 包从 pgsql 获取大约 250k 行到 excel 时

我收到以下错误

pywintypes.com_error: (-2147024882, '没有足够的内存资源可用于完成此操作。', None, None)

【问题讨论】:

  • 不确定这发生在哪里(pgsqlexcel 虽然我倾向于认为是后者),或者内存是如何处理的,但很明显要做的就是将线条分成更小的块(例如 10k 个元素)。

标签: python-3.x postgresql automation pywin32


【解决方案1】:

我在加载 92,875 X 60 尺寸的纸张时遇到了同样的问题。在这张纸变大之前它工作得很好。

我想出了一个方法来解决这个问题,这很简单。与其加载整个数据范围,不如先读取一行,然后再读取另一行。

比如我的代码原本是这样的:

finalrow = ws.Cells(ws.Rows.Count, "A").End(win32com.client.constants.xlUp).Row
finalcell = '$%s$%s' % (finalcolumn, finalrow)
r = ws.Range('$A$1:' + finalcell).Value
rows = list(r) 

其中 finalcolumn 是一个常数值,例如“BH”。

改为:

finalrow = ws.Cells(ws.Rows.Count, "A").End(win32com.client.constants.xlUp).Row
finalcell = '$%s$%s' % (finalcolumn, finalrow)
rows = []
for i in range(finalrow):
    r = ws.Range('$A$%s:$%s$%s' % (i+1, finalcolumn, i+1)).Value
    rows += list(r)

没有观察到显着的性能损失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-15
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2011-02-22
    相关资源
    最近更新 更多