Django:如何将现有文件插入数据库?

时间:2009-12-18 21:43:10

标签: django django-models

用户上传文件并将该文件转换为新格式。如何将创建的文件插入数据库?

当我做明显的field.file = newfile时,它会尝试上传它。所以,我想问题是,如何在不尝试将文件写入文件系统的情况下将文件添加到数据库中?

- Edit-- 我不想将文件存储在数据库中。我只想设置FileField指向的路径,而不让FileField尝试将文件写入磁盘(因为它已经在磁盘上)。

3 个答案:

答案 0 :(得分:3)

你当然可以通过直接修改数据库来做到这一点(就像我刚才那样)。您可以使用基于django的脚本创建要执行的sql代码,然后通过数据库运行它(在我的情况下是sqlite3):

# Set up django environment
from django.core.management import setup_environ
from app import settings
setup_environ(settings)

from project.app.models import MyModel

# Prints sql to update file locations since django won't :(

for myModel in MyModel.objects.all():
  # You can do the below even better if you use the same method as the model uses
  # to generate upload_to
  file_name = 'my_file_this_should_depend_on_myModel'
  file_location = 'path/to/file/dir/%s' % file_name
  print "UPDATE app_mymodel SET file_field='%s' WHERE id=%s;" % \
    (file_location, myModel.id)

然后使用此脚本的输出并通过您的数据库运行它!

答案 1 :(得分:1)

简短的回答,在Django中没有直接的方法可以做到这一点,并且核心开发人员并不热衷于此 - 请参阅票证#652

答案 2 :(得分:0)

Set Django's FileField to an existing file是一个较新的副本,但答案似乎比直接修改数据库更好。