Ich mache ein Modell, in dem ich eine FileField
habe. Ich möchte den Dateiinhalt in einer Datenbankspalte anstelle des Dateipfads speichern. Irgendwelche Vorschläge?Dateiinhalt in DB speichern
Antwort
es ist sehr einfach
nur
Speichermethode in Admin overidefilecontent=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()
diese speichert filecontent in db Spalte filecontent der Tabelle filecontent
Dies wird nicht funktionieren. Die erste Binärdatei, die Sie mit Nicht-ASCII-Zeichen speichern möchten, wird in die Luft gehen. Sie müssen es zuerst mit base64 codieren und dann dekodieren, wenn Sie es aus der Datenbank lesen. – Cerin
Nun, wie wäre es mit der Speicherung in einer binären Spalte? Sie können dann die Sammlung von Bytes speichern. Und wenn der Dateiname auch für Sie wichtig ist, können Sie diesen in einer zusätzlichen Namensspalte speichern.
Die Neinsager ignorieren. Wenn Sie die volle Kontrolle über Ihren Inhalt haben möchten, legen Sie die Dateien in ein Blob-Feld in der Datenbank. Ich halte den Dateinamen im Allgemeinen auch in einem separaten Feld, sodass ich die Datei nach Bedarf rekonstruieren kann (auf diese Weise behalten Sie die Erweiterung bei, die sie in den meisten Betriebssystemen mit einem Dateityp verknüpft).
Stellen Sie sicher, dass Sie die tatsächlichen Blobdaten in einer separaten Tabelle speichern, die nur über eine ID mit Ihrer Dateinamen-/Zusatzinfo-Tabelle verbunden ist. Auf diese Weise opfern Sie keine Leistung im Umgang mit Informationen in Bezug auf die Datei anders als der Inhalt selbst.
Was die Neinsager nicht erkennen, ist, dass Datenbanken einfach eine extrem optimierte Form des Dateisystems sind. Bytes sind Bytes und Disc-Sektoren sind Disc-Sektoren. Datenbanken sind einfach viel besser beim Organisieren und Durchsuchen dieser Bytes als bei Dateisystemen. Ganz zu schweigen davon, dass Datenbanken viel strengere Sicherheitsanforderungen als die meisten Dateisysteme erfüllen und besser gewartet werden (mit Backups, Support-Mitarbeitern usw.).
Ich möchte nur den Dateiinhalt in der db-Spalte einer Tabelle speichern, die nicht daran interessiert ist, eine Tabelle dafür zu verschwenden. Ich kann den Dateiinhalt wieder in demselben Patern wiederherstellen. – ha22109
Vielen Dank für einen kleinen Realitätscheck. Ich habe immer gespürt, dass Djangos Standardabneigung gegen das Speichern von Dateien in der Datenbank zu einfach ist. Selbst wenn Sie sie aus der Datenbank bereitstellen möchten, können Sie Ihr Modell immer mit einer Cache-Schicht umhüllen, um das Beste aus beiden Welten zu erhalten. – Cerin
Ich weiß, dass dies eine alte Frage, aber es gibt Seither wurde ein guter Code geschrieben, um diese Option zu ermöglichen. Siehe speziell django-database-files, die Djangos Speicher-API verwenden wird, damit alle FileFields und ImageFields ihren Inhalt in der Datenbank speichern. Es gibt auch eine fork, um die Dateien lokal im Dateisystem zwischenzuspeichern, um den größten Nachteil der Datenbank zu überwinden, nämlich die Latenz.
- 1. Speichern in DB (mvc)
- 2. php: Dateiinhalt abrufen und Datei in bestimmten Ordner speichern
- 3. Java BitSet in DB speichern
- 4. Ein X509Certificate2 in DB speichern
- 5. lasen in dem Dateiinhalt
- 6. Dateiinhalt in Make überprüfen
- 7. Dateiinhalt in Eigenschaft aufnehmen?
- 8. Speichern von DB-Verbindungszeichenfolgen
- 9. So speichern Sie Dateiinhalt mit StreamWriter am Ende
- 10. Fenster - findstr in for-Schleife (Dateiinhalt)
- 11. Textdatei in DB-Tabelle speichern mit oData
- 12. node.js multer Speichern von Dateinamen in db
- 13. Speichern von Zeit-Temperatur-Daten in DB
- 14. Schienen - Optionen in DB speichern (onChange)
- 15. DB-Verbindungen in Ressourcenvariablen im Frühjahr speichern
- 16. Google Places API: Orte in DB speichern
- 17. Schienen - Optionen speichern in DB (onchange)
- 18. Speichern bekannter und unbekannter Felder in db
- 19. Wie Facebook authentifizierten Benutzer in DB speichern?
- 20. Yii2 Rest erstellen - Speichern in DB
- 21. Perl-Code Dateiinhalt
- 22. Den verschlüsselten Dateiinhalt entschlüsseln?
- 23. Abrufen von doc-Dateiinhalt
- 24. Kameltest - assertMockEndpointsSatisfied mit Dateiinhalt
- 25. JS Dateiinhalt abrufen?
- 26. Java - Werden nicht Dateiinhalt auslesen
- 27. Javascript erhalten Dateiinhalt Schleife
- 28. Dateiinhalt mit Laravel lesen
- 29. erstellen eine Tabelle zum Beispiel Dateiinhalt Python
- 30. Dateiinhalt in Unix-Variable mit Zeilenumbrüchen
Warum möchten Sie das tun? Dateien gehören zum Dateisystem. –
Wie viel binäre Daten möchten Sie in der Datenbank speichern? Es besteht ein großer Unterschied zwischen dem Speichern einiger Binärobjekte in der Datenbank im Vergleich zum Speichern Tausender großer Binärdateien. – Kane
Ja. Was ist der Grund für diese Entscheidung? Warum nicht auf dem FS speichern? – exhuma