首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Django StreamingHttpResponse流Excel文件

用Django StreamingHttpResponse流Excel文件
EN

Stack Overflow用户
提问于 2022-09-27 07:08:17
回答 1查看 74关注 0票数 0

我使用的方法是生成和发送包含多达4M记录的excel文件,因为该文件可能很大,所以在生成文件时我想要流响应。

https://docs.djangoproject.com/en/2.0/howto/outputting-csv/#streaming-large-csv-files:这正是我想要的,但对于包含4M记录的excel文件来说,这正是我想要的。

下面是我想用excel格式实现的csv格式的模板代码

代码语言:javascript
运行
复制
def get_stuff():
def fetch_from_server_cursor(cursor, cursor_name, fetch_size=10000):
    while True:
        cursor.execute("FETCH {fetch_size} FROM {cursor_name}".format(fetch_size = fetch_size, cursor_name = cursor_name))
        chunk = cursor.fetchall()
        if not chunk:
            return
        yield from chunk

with transaction.atomic(), connection.cursor() as cursor:
    cursor_name = "my_cursor"
    cursor.execute(
        """
        DECLARE {cursor_name} CURSOR FOR
        SELECT field1,field2
        FROM {table_name}
        WHERE field3 = XX
        """.format(cursor_name = cursor_name,table_name = MyModel.objects.model._meta.db_table)
    )
    yield from fetch_from_server_cursor(cursor, cursor_name)

def stream_csv_view(request):
"""A view that streams a large CSV file."""
# Generate a sequence of rows. The range is based on the maximum number of
# rows that can be handled by a single sheet in most spreadsheet
# applications.
pseudo_buffer = Echo()
writer = csv.writer(pseudo_buffer)
response = StreamingHttpResponse((writer.writerow(row) for row in get_stuff()),
                                 content_type="text/csv")
response['Content-Disposition'] = 'attachment; filename="test.csv"'
return response

另外,有人可以查看get_stuff()函数并推荐我一种更好的访问数据库的方法吗?

对此有什么帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2022-09-27 07:13:38

您可以使用可以从queryset导出csv的django-queryset-csv模块,而且默认情况下它也使用StreamingHttpResponse而不是普通的HttpResponse。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73863631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档