【发布时间】:2016-08-03 08:43:33
【问题描述】:
我正在编写一个 Web 应用程序,它有时可能会在 Excel 文件中输出数十万行(甚至更多行)。 openpyxl 被选择用于 Excel 输出准备,但我不确定是否可以从数据库中读取数据并同时输出。有没有办法做到这一点?这是我在 CSV 中的意思的示例:
def csv_view(request, iterator, keys):
"""A view that streams a large CSV file."""
class Echo(object):
"""An object that implements just the write method of the file-like
interface.
"""
def write(self, value):
"""Write the value by returning it,
instead of storing in a buffer."""
return value
def get_iter():
writer = csv.writer(Echo())
yield writer.writerow(keys)
for row in iterator:
yield writer.writerow(row)
response = StreamingHttpResponse(get_iter(), content_type="text/csv")
response['Content-Disposition'] = 'attachment; filename="output.csv"'
return response
【问题讨论】:
-
数据库是指csv文件吗?
-
数据库我的意思是“任何迭代器”。我基本上需要一个等效的
csv_view函数,它可以动态生成 XLS 而不是 CSV。 @jmunsch -
可能能够创建一个
SpooledTemporaryFile,其最大大小为 excel 可以处理的大小,然后流式传输分块的 excel 文件?看起来write_only模式使用了无限大小的NamedTemporaryFile?不确定用例。 -
您可以使用 ado 将 xlsx 文件查询到记录集并对其进行迭代?
-
如果您可以通过 COM 使用 Excel 工作簿 - 范围对象有一个
.CopyFromRecordSet()方法,这意味着您不必使用迭代器 - 只需将您的数据从数据库中获取到记录集并使用该方法一次性“转储”数据。
标签: python excel streaming openpyxl bigdata