⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

流式响应实战:用 StreamingHttpResponse 导出千万级 CSV 不爆内存

解决大文件导出时的内存爆炸问题,利用生成器与 StreamingHttpResponse 实现边生成边下载。 · 难度:入门 · +10XP

流式响应实战:用 StreamingHttpResponse 导出千万级 CSV 不爆内存

多数教程的 CSV 导出使用 HttpResponse 配合 StringIO,数据量大时内存飙升。本教程教你使用 Python 生成器(yield)配合 StreamingHttpResponse,每次只从数据库读取一行(iterator() + values_list()),逐行编码写入响应流。同时讲解如何设置正确的 Content-Type 和 Content-Disposition 让浏览器触发下载。最终效果:导出 1000 万行数据的内存占用不到 50MB。

def stream_csv(request):
    def generate_rows():
        yield ','.join(['name', 'email']) + '
'
        for user in User.objects.all().iterator():
            yield f"{user.name},{user.email}
"
    response = StreamingHttpResponse(
        generate_rows(), content_type='text/csv'
    )
    response['Content-Disposition'] = 'attachment; filename="users.csv"'
    return response
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 189 篇
0 完成
🔥 0