首页 > 解决方案 > 如何生成excel文件并将其作为文件保存到数据库

问题描述

我创建了一个使用 xlwt 创建 excel 文件的函数。我能够将其作为文件下载,但我希望先将其保存到数据库中,而我所做的却不起作用。

这是我到目前为止所做的。

import xlwt

response = HttpResponse(content_type='application/ms-excel')
response['Content-Disposition'] = 'attachment; filename="excel-file.xls"'

wb = xlwt.Worbook()
# some excel file generating code here
wb.save(response)

return response

生成excel文件后,我尝试将其保存到数据库中,但这样做不起作用。(代码如下)

# file = models.FileField
Reports.objects.create(
   file=wb
)

我也尝试过先将其保存到流中,但这样保存也不起作用。(代码如下)

f = io.StringIO()
wb.save(f)

# file = models.FileField
Reports.objects.create(
   file=f
)

标签: pythondjango

解决方案


好的,我想我明白你现在在问什么了。

不幸的是,FileField该类旨在将(上传的)文件保存在文件系统中,而不是数据库中。这大概是件好事。数据库并非旨在用作文件系统。但无论哪种方式,如果使用FileField数据库将只包含文件名,而不包含文件内容。

所以我的第一个建议是按预期使用FileField和。https://docs.djangoproject.com/en/3.0/topics/files/#file-storageFileSystemStorage中有一些示例代码显示了如何将一些内容保存到默认文件存储中。

或者,如果您真的想将 Excel 对象存储在数据库中,则需要FileFieldBinaryField. 然后你可以做这样的事情:

  buffer = BytesIO()
  wb.save(buffer)
  // excel = models.BinaryField()
  Reports.object.create(excel=buffer.getValue(), ...)

(可能有更有效的方法来做到这一点。)


推荐阅读