5

我想将在 Python 中生成的大型数据集存储在 Django 模型中。我的想法是将数据腌制为字符串并将其上传到我模型的 FileField。我的 Django 模型是:

#models.py
from django.db import models

class Data(models.Model):
    label = models.CharField(max_length=30)
    file = models.FileField(upload_to="data")

在我的 Python 程序中,我想做以下事情:

import random, pickle

data_entry = Data(label="somedata")
somedata = [random.random() for i in range(10000)]
# Next line does NOT work 
#data_entry.file.save(filename, pickle.dumps(somedata))

我应该如何修改最后一行以somedata保存file用参数定义的路径upload_to

4

5 回答 5

10

根据对问题的回答,我提出了以下解决方案:

from django.core.files.base import ContentFile
import pickle

content = pickle.dumps(somedata)
fid = ContentFile(content)
data_entry.file.save(filename, fid)
fid.close()

所有这些都是在服务器端完成的,并且不允许用户上传泡菜。我对其进行了测试,一切正常,但我愿意接受任何建议。

于 2009-05-11T15:48:04.390 回答
1

在您的数据库中,文件属性只是文件的路径。因此,由于您没有进行实际上传,因此您需要将文件存储在磁盘上,然后将路径保存在数据库中。

f = open(filename, 'w')
pickle.dump(somedata, f)
f.close()
data_entry.file=filename
data_entry.save()
于 2009-05-11T13:46:38.690 回答
0

将数据存储在文本字段中会不会更好?毕竟,这不是文件上传。

于 2009-05-11T12:40:01.627 回答
0

我从来没有这样做过,但是基于阅读一些相关代码,我首先研究创建 django.core.files.base.ContentFile 的实例并将其分配为字段的值。

于 2009-05-11T15:21:23.233 回答
-3

注意:请参阅下面的其他答案和评论- 旧信息和损坏的链接已删除(无法删除曾经接受的答案)。

Marty Alchin 在 Pro Django 的第 3 章中对此有一个部分,请在此处查看

于 2009-07-08T10:21:40.973 回答