Estoy haciendo un modelo en el que tengo un FileField
. Quiero almacenar el contenido del archivo en una columna de base de datos, en lugar de la ruta del archivo. ¿Alguna sugerencia?Almacenamiento de contenido de archivos en DB
Respuesta
es muy fácil
simplemente overide método para guardar en el administrador
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()
este almacenará fileContent en dB columna fileContent de fileContent mesa
Esto no funcionará. El primer archivo binario que intente guardar con caracteres que no sean ASCII lo explotará. Primero debe codificarlo utilizando base64 y luego decodificarlo cuando lo lea fuera de la base de datos. – Cerin
Bueno, ¿qué tal si simplemente lo almacenamos en una columna binaria? A continuación, puede almacenar la colección de bytes. Y si el nombre del archivo también es importante para usted, puede almacenarlo en una columna de nombre adicional.
Ignore los que menos. Si desea tener control total sobre su contenido, coloque los archivos en un campo blob en la base de datos. En general, también guardo el nombre del archivo en un campo separado, por lo que puedo reconstruir el archivo según sea necesario (de esa manera conservas la extensión, lo que la vincula a un tipo de archivo en la mayoría de los sistemas operativos).
Asegúrese de almacenar los datos de blobs reales en una tabla separada, solo conectada a su nombre de archivo/tabla de información adicional mediante una identificación ... de esa manera no sacrificará ningún rendimiento al tratar con cualquier información relacionada con el archivo que no sea el contenido en sí.
Lo que los detractores no se dan cuenta es que las bases de datos son simplemente una forma extremadamente optimizada de sistema de archivos. Los bytes son bytes y los sectores de disco son sectores de disco. Las bases de datos son mucho mejores para organizar y buscar esos bytes que los sistemas de archivos. Sin mencionar que las bases de datos implementan una seguridad mucho más estricta que la mayoría de los sistemas de archivos y se mantienen mejor (con copias de seguridad, personal de soporte, etc.).
solo quiero almacenar el contenido del archivo en la columna db de una tabla, no estoy interesado en perder la tabla por él. Puedo recuperar el contenido del archivo de nuevo en el mismo patrón. – ha22109
Gracias por un pequeño control de la realidad. Siempre he sentido que la aversión predeterminada de Django a almacenar archivos en la base de datos es demasiado simplista. Incluso si desea servirlos desde la base de datos, siempre puede envolver su modelo con una capa de almacenamiento en caché, para tener lo mejor de ambos mundos. – Cerin
Sé que esto es una cuestión de edad, pero no hay Ha sido un buen código escrito desde entonces para permitir esta opción. Especialmente, vea django-database-files, que usará la API de almacenamiento de Django para hacer que todos FileFields e ImageFields almacenen sus contenidos en la base de datos. También hay un fork para almacenar en caché los archivos localmente en el sistema de archivos, para superar la mayor advertencia sobre el uso de la base de datos, que es la latencia.
- 1. ¿Cómo abordar el almacenamiento de descuentos en el archivo db para el contenido del usuario?
- 2. Almacenamiento de archivos para aplicaciones web: Sistema de archivos vs DB vs motores NoSQL
- 3. html5 almacenamiento fuera de línea preparado db
- 4. Almacenamiento de muchos archivos de registro
- 5. ¿Por qué gettext no tiene una opción de almacenamiento db?
- 6. Almacenamiento de archivos de audio en html5 almacenamiento local-descarga de archivos de audio con javascript
- 7. almacenamiento en caché de archivos de JavaScript
- 8. DB Design Question - Almacenamiento de nombres de personas internacionales
- 9. Almacenamiento de imágenes: Sistema de base de datos o archivos -
- 10. Almacenamiento de archivos en Heroku - ¿alternativas?
- 11. Almacenamiento de archivos predeterminado personalizado en Django
- 12. Almacenamiento en caché de archivos Css
- 13. Encontrar almacenamiento temporal de archivos en Java
- 14. Visualización de contenido de almacenamiento local en IE
- 15. Descanso de la negociación de contenido y almacenamiento en caché
- 16. Almacenamiento en etapas Archivos eliminados
- 17. Reemplazo de contenido de archivos en PHP
- 18. múltiples implementadores única base de datos de distribución de contenido (DB) Broker
- 19. Sesiones Almacenamiento en DB tabla que no trabaja (usando Zend_Session_SaveHandler_DbTable)
- 20. Almacenamiento de contenido en caché solo para usuarios no autenticados
- 21. Monte NoSQL DB como sistema de archivos
- 22. Almacenamiento sin conexión HTML5. ¿Almacenamiento de archivos? Directorios y sistemas de archivos API
- 23. Eliminar contenido de archivos android
- 24. Almacenamiento de contenido de UITextField antes de ver pops
- 25. Django personalizado sistema de almacenamiento de archivos
- 26. Contenido dividido de php en varios archivos
- 27. Obtener contenido de archivos en AppHarbor
- 28. Acceso/almacenamiento de archivos más rápido?
- 29. Almacenamiento de tamaños de archivos en una base de datos
- 30. Almacenamiento de permisos de archivos en el repositorio de Subversion
¿Por qué quieres hacer eso? Los archivos pertenecen al sistema de archivos. –
¿Cuántos datos binarios espera almacenar en la base de datos? Existe una gran diferencia entre almacenar algunos objetos binarios en la base de datos en comparación con almacenar miles de archivos binarios grandes. – Kane
Sí. ¿Cuál es el fundamento de esa decisión? ¿Por qué no almacenarlos en el FS? – exhuma