Je fais un modèle dans lequel j'ai un FileField
. Je veux stocker le contenu du fichier dans une colonne de base de données, au lieu du chemin du fichier. Aucune suggestion?Stocker le contenu du fichier dans DB
Répondre
il est très facile
juste OVERIDE méthode de sauvegarde dans l'admin
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()
ce stockera ContenuFichier dans la colonne db ContenuFichier de la table ContenuFichier
Cela ne fonctionnera pas. Le premier fichier binaire que vous essayez d'enregistrer avec des caractères non-ASCII le fera exploser. Vous devez d'abord l'encoder en utilisant base64, puis le décoder en le lisant hors de la base de données. – Cerin
Eh bien, que diriez-vous simplement de le stocker dans une colonne binaire? Vous pouvez ensuite stocker la collection d'octets. Et si le nom de fichier est important pour vous aussi, vous pouvez le stocker dans une colonne de nom supplémentaire.
Ne tenez pas compte des détracteurs. Si vous voulez avoir un contrôle total sur votre contenu, placez les fichiers dans un champ blob dans la base de données. En général, je garde également le nom de fichier dans un champ séparé, afin que je puisse reconstruire le fichier si nécessaire (de cette façon, vous gardez l'extension, ce qui le lie à un type de fichier dans la plupart des systèmes d'exploitation). Assurez-vous de stocker les données BLOB réelles dans un tableau séparé, uniquement connecté à votre nom de fichier/table d'information supplémentaire via un ID ... De cette façon, vous ne sacrifiez pas les performances lorsque vous manipulez des informations relatives au fichier autre que le contenu lui-même.
Ce que les opposants échouent à réaliser, c'est que les bases de données sont simplement une forme extrêmement optimisée de système de fichiers. Les octets sont des octets et les secteurs de disque sont des secteurs de disque. Les bases de données sont simplement beaucoup mieux à organiser et à chercher ces octets que les systèmes de fichiers. Sans oublier que les bases de données implémentent une sécurité beaucoup plus stricte que la plupart des systèmes de fichiers et sont mieux maintenues (avec des sauvegardes, du personnel de support etc.).
je veux seulement stocker le contenu de fil dans la colonne de DB d'une table, pas intéressé à gaspiller la table pour cela. Je peux regagner le contenu de dossier encore dans le même patern. – ha22109
Merci pour un peu de vérification de la réalité. J'ai toujours senti que l'aversion par défaut de Django pour stocker des fichiers dans la base de données est trop simpliste. Même si vous voulez les servir à partir de la base de données, vous pouvez toujours envelopper votre modèle avec une couche de mise en cache, pour avoir le meilleur des deux mondes. – Cerin
Je sais que c'est une vieille question, mais il y a été un bon code écrit depuis lors pour permettre cette option. Spécialement, voir django-database-files, qui utilisera l'API de stockage de Django pour que tous les fichiers FileFields et ImageFields stockent leur contenu dans la base de données. Il y a également un fork pour mettre en cache les fichiers localement sur le système de fichiers, afin de surmonter le plus gros problème d'utilisation de la base de données, qui est la latence.
- 1. stocker le fichier PDF dans DB comme octet
- 2. modifier le contenu du fichier
- 3. Copier le contenu du fichier avec sed
- 4. Stocker des ressources externes dans DB?
- 5. Rechercher le contenu du fichier sur l'iphone
- 6. Importer le fichier mysql dans l'accès DB
- 7. restaurer mysql db à partir du contenu de split mysqldump
- 8. Contenu du fichier de vidage (.ds) dans un fichier texte
- 9. Actualiser le contenu dans un fichier .ascx
- 10. Inclure le contenu d'un fichier dans JSP
- 11. Comment attacher un fichier HTML à un email en utilisant du contenu issu de DB en PHP?
- 12. Comment stocker le fichier traité dans le bureau des utilisateurs?
- 13. VMS EDT - Comment sélectionner le contenu complet du fichier?
- 14. Une bonne façon de stocker des valeurs RadioButton dans DB
- 15. Lire le contenu du fichier et trouver le nom de fichier complet sur le disque
- 16. C# lire le contenu du fichier et trouver des chaînes
- 17. Comment afficher le contenu du fichier de morue BlackBerry?
- 18. Substituer avec le contenu du registre ou des lignes vont d'ailleurs dans le fichier dans Vim
- 19. stocker des images dans le serveur sql
- 20. Inconsistance dans le fichier avant et après le téléchargement dans Oracle DB
- 21. Ecriture du contenu d'un RichTextBox dans un fichier
- 22. Comment stocker le contenu d'un e-mail (l'e-mail et les pièces jointes) dans un fichier dans SharePoint?
- 23. Stocker et récupérer le fichier .ZIP dans SQL Server 2005
- 24. Comment télécharger un fichier sur HTTP et stocker son contenu dans une chaîne en Java
- 25. Supprimer le contenu d'un fichier en Java
- 26. Comment stocker le fichier sur le serveur ASP.net
- 27. Aligner le contenu du bouton
- 28. Perforce "Échec de la traduction du contenu du fichier"
- 29. Stocker du contenu dans plusieurs langues? Par exemple. Anglais, Français, Allemand
- 30. Chargement dynamique du contenu NSPopUpButton à partir du fichier XML
Pourquoi voulez-vous faire cela? Les fichiers appartiennent au système de fichiers. –
Combien de données binaires pensez-vous stocker dans la base de données? Il y a une grande différence entre le stockage de quelques objets binaires dans la base de données et le stockage de milliers de gros fichiers binaires. – Kane
Oui. Quelle est la raison d'être de cette décision? Pourquoi ne pas les stocker sur le FS? – exhuma