0

在我的基于 python/django 的 Web 应用程序中,我想将应用程序的 SQLite 数据库中的一些(不是全部!)数据导出到新的 SQLite 数据库文件中,并在 Web 请求中将第二个 SQLite 文件作为可下载文件返回。

换句话说:用户访问了某个视图,并且在内部创建了一个新的 SQLite DB 文件,填充了数据,然后返回。

现在,虽然我知道:memory:在内存中创建 SQLite DB 的魔力,但我不知道如何在 Web 请求中将该内存数据库作为可下载文件返回。你能给我一些关于我如何达到这个目标的提示吗?我想避免在请求期间将内容写入光盘。

4

2 回答 2

1

我不确定您是否可以获取:memory:数据库的内容以将其视为文件;快速浏览 SQLite 文档表明它的 API 不会将:memory:数据库作为二进制字符串或内存映射文件或任何其他可以将其作为一系列字节访问的方式公开给您。访问:memory:数据库的唯一方法是通过 SQLite API。

我会做的是设置您的服务器以安装一个目录ramfs,然后在该目录中创建一个 SQLite3 数据库作为“文件”。完成数据库填充后,返回该“文件”,然后将其删除。这将是迄今为止最简单的解决方案:您将避免将任何内容写入磁盘,并且您将获得与使用:memory:数据库相同的速度优势,但您的代码将更容易编写。

于 2013-06-29T16:47:24.783 回答
0

使用 Web 内容,您可以轻松地将文件作为原始二进制文件提供,并在响应中指定内容类型。

Django 使这变得相当容易——这是我在我的一个网站上使用的一个片段,用于为用户生成条形码。

def barcode(request):
    from core import ugbarcode
    bar = ugbarcode.UGBar("0001")
    binStream = bar.asString('gif')
    return HttpResponse(binStream, 'image/gif')

有关指定它是触发下载的附件的更多详细信息,另请参见这篇文章:Generating file to download with Django

于 2013-06-29T16:38:23.093 回答