Wie speichere ich eine Bilddatei in einer Postgres-Datenbank?

7

Für Lernzwecke erstelle ich eine Site mit Python + Flask. Ich möchte ein Bild aus der Datenbank wiederherstellen und auf dem Bildschirm anzeigen. Aber ein Schritt nach dem anderen.

Ich habe überhaupt keine Ahnung, wie ich ein Bild in meiner Datenbank speichern kann. Meine Suche ergab nur, dass ich einen bytea -Typ in meiner Datenbank verwenden muss. Dann bekomme ich mein Bild und irgendwie (??) wandle es in ein Array von Bytes (bytea == Array von Bissen?) Und irgendwie (??) benutze dieses Array in einem Einfügebefehl.

Ich konnte (vielleicht) herausfinden, wie man es in Java macht ( hier ) und C # ( hier ) ), aber ich würde wirklich gerne Python benutzen, zumindest für den Moment.

Kann mir jemand helfen?

Auf dieser Seite gibt es jede Menge Fragen dieser Art. Aber die meisten (leicht über 85%) von ihnen werden geantwortet als "Sie sollten Bilder in Ihrer Datenbank nicht speichern, sie gehören in fs" und beantworten die Frage nicht. Der Rest löst mein Problem nicht ganz. Also bitte markieren Sie das nicht als Duplikat, wenn das Duplikat diese Art von Antwort hat.

    
Felipe Matos 26.05.2013, 21:38
quelle

5 Antworten

20

Ich schreibe normalerweise keine vollständigen Beispielprogramme für Leute, aber Sie haben es nicht verlangt, und es ist ein ziemlich einfaches, also gehen Sie hier:

%Vor%

Mit Python geschrieben 3.3. Wenn Sie Python 2.7 verwenden, müssen Sie die Datei lesen und in ein buffer -Objekt konvertieren oder die Funktionen für große Objekte verwenden. Die Konvertierung in Python 2.6 und älter erfordert die Installation von argparse, wahrscheinlich andere Änderungen.

Sie sollten die Datenbankverbindungszeichenfolge in etwas ändern, das für Ihr System geeignet ist, wenn Sie es testen möchten.

Wenn Sie mit großen Bildern arbeiten, sollten Sie psycopg2s Unterstützung für große Objekte anstelle von bytea - insbesondere lo_import für den Speicher, lo_export für das direkte Schreiben in eine Datei und das große Objekt liest Funktionen zum Lesen kleiner Teile des Bildes gleichzeitig.

    
Craig Ringer 27.05.2013, 00:11
quelle
3

Ich hoffe, das wird für Sie funktionieren.

%Vor%

StringIO Bild

    
iraycd 26.05.2013 22:40
quelle
3
%Vor%     
Mandeep Kaur 07.10.2014 09:48
quelle
0

Sie können Pythons base64 zum Kodieren und Dekodieren beliebiger Binärzeichenfolgen in Text verwenden Zeichenfolgen.

    
Jeff Bauer 26.05.2013 21:50
quelle
0

das ist meine Lösung, es kann auf meiner Website funktionieren:

%Vor%

Verwenden von Flask, Flask-Alchemy zur Datenbankverwaltung.

%Vor%

das ist HTML-Datei. Sie können es in Ihr HTML einbetten.

    
Abirdcfly 06.03.2016 04:40
quelle