Хранение содержимого файла в БД

Я делаю модель, в которой у меня естьFileField, Я хочу хранить содержимое файла в столбце базы данных, а не в пути к файлу. Какие-либо предложения?

 exhuma03 сент. 2009 г., 11:20
Да. Каково обоснование этого решения? Почему бы не хранить их на ФС?
 Daniel Roseman03 июл. 2009 г., 14:39
Почему ты хочешь это сделать? Файлы принадлежат файловой системе.
 Kane04 июл. 2009 г., 06:23
Сколько двоичных данных вы ожидаете сохранить в базе данных? Существует большая разница между хранением нескольких двоичных объектов в базе данных по сравнению с хранением тысяч больших двоичных файлов.

Ответы на вопрос(4)

Я знаю, что это старый вопрос, но с тех пор был написан хороший код, позволяющий использовать эту опцию. Специально, посмотриДжанго-база-файлы, который будет использовать API хранилища Django, чтобы все FileFields и ImageFields сохраняли свое содержимое в базе данных. Есть такжевилка локально кэшировать файлы в файловой системе, чтобы преодолеть самый большой недостаток использования базы данных, а именно задержку.

Не обращайте внимания на скептиков. Если вы хотите иметь полный контроль над своим содержимым, поместите файлы в поле BLOB-объектов в базе данных. Обычно я также храню имя файла в отдельном поле, чтобы при необходимости можно было восстановить файл (таким образом вы сохраняете расширение, которое связывает его с типом файла в большинстве операционных систем).

Обязательно сохраняйте фактические данные большого двоичного объекта в отдельной таблице, только связанной с вашим именем файла / таблицей дополнительной информации через идентификатор ... таким образом, вы не жертвуете какой-либо производительностью при работе с любой информацией, связанной с файлом, кроме содержимого сам.

Что скептики не понимают, так это то, что базы данных - это просто чрезвычайно оптимизированная форма файловой системы. Байты - это байты, а секторы диска - это сектора диска. Базы данных просто намного лучше организовывают и ищут эти байты, чем файловые системы. Не говоря уже о том, что базы данных обеспечивают гораздо более строгую защиту, чем большинство файловых систем, и лучше обслуживаются (с резервными копиями, службой поддержки и т. Д.).

 ha2210903 сент. 2009 г., 12:23
я только хочу сохранить содержимое файла в столбце db таблицы, не заинтересовавшись потерей таблицы для него. Я могу восстановить содержимое файла снова в том же шаблоне.
 20 дек. 2011 г., 16:45
Спасибо за небольшую проверку реальности. Я всегда чувствовал, что отвращение Django по умолчанию к хранению файлов в базе данных слишком упрощено. Даже если вы хотите обслуживать их из базы данных, вы всегда можете обернуть свою модель слоем кэширования, чтобы получить лучшее из обоих миров.
Решение Вопроса

это очень просто

просто переопределите метод сохранения в админ

filecontent=form.cleaned_data.get('upload_file')  
data =filecontent.read()
from django.db import connection
cursor = connection.cursor()
cursor.execute("update filecontent set filecontent=(%s) where id=(%s)",[data,obj.id])
connection.connection.commit()
cursor.close()
connection.close()

это будет хранить содержимое файла в столбце базы данных

 20 дек. 2011 г., 16:42
Это не сработает. Первый двоичный файл, который вы пытаетесь сохранить с не-ASCII-символами, взорвет его. Вам необходимо сначала закодировать его с помощью base64, а затем декодировать при чтении из базы данных.

Ну, а как насчет просто хранить его в двоичном столбце? Затем вы можете хранить коллекцию байтов. И если имя файла также важно для вас, вы можете сохранить его в дополнительном столбце имени.

Ваш ответ на вопрос