0

speichert Ich versuche, ein Bild unter Verwendung des Flaschenmodells zu speichern. Ich weiß nicht, wie man das Bild in Postgres speichert, also habe ich das Bild zu base64 kodiert und ich versuche, den resultierenden Text in Postgres zu speichern. Es funktioniert, aber ist es ein empfohlene Weg, um diesen codierten Text oder das Bild in Postgres zu speichern Kolben-Modellwie man Bild in Postgres unter Verwendung des Flaschenmodells

class User_tbl(db.Model): 
    id = db.Column(db.Integer,primary_key=True) 
    mobile=db.Column(db.String(13),unique=True) 
    country=db.Column(db.String(30)) 
    image=db.Column(db.String(256)) 

def __init__(self,mobile,country,image): 
    self.mobile=mobile 
    self.country=country 
    self.image = image 

Antwort

0

Die recomended Weg, um ein Bild in Postgres über Kolben zu speichern ist das Bild in Ihrem statischen Ordner zu speichern (wo Sie Javascript & CSS-Dateien speichern) und über einen Webserver, d. H. Nginx. Es wird in der Lage sein, es effizienter als Kolben zu machen. Sie sollten den Pfad zu Ihrem Bild nur auf postgres speichern und dann das tatsächliche Bild auf dem Dateisystem speichern.

0

Ich weiß, dass es vielleicht zu spät ist, diese Frage zu beantworten, aber in diesen Tagen versuchte ich, etwas Ähnliches zu lösen, und keine der vorgeschlagenen Lösungen scheint das Hauptproblem aufzuklären. Natürlich basiert jede Best Practice auf Ihren Bedürfnissen. Im Allgemeinen finden Sie jedoch, dass das Einbetten einer Datei in die Datenbank keine gute Übung ist. Es hängt davon ab. Ich lese die "Storing Binary files in the Database" von postgresql Wiki produziert, entdeckte ich, dass es einige Fälle gibt, in denen diese Praxis stattdessen sehr empfohlen wird, zum Beispiel wenn die Dateien ACID sein müssen. In diesen Fällen, zumindest in Postgres, bytea ist der Datentyp gegenüber Text oder BLOB-Binärcode zu bevorzugen, manchmal auf Kosten von etwas höheren Speicheranforderungen für den Server. In diesem Fall: 1) Sie brauchen keine speziellen Dialekte. Der Datentyp LargeBinary reicht aus, da er als "großer und/oder nicht erweiterter Binärtyp für die Zielplattform" übersetzt wird. 2) In PostgreSQL sind natürlich keine Encode/Decode-Funktionen notwendig, natürlich in diesem speziellen Fall. 3) Wie ich bereits sagte, ist es nicht immer eine gute Strategie, die Dateien im Dateisystem zu speichern. Verwenden Sie auf keinen Fall einen Textdatentyp mit base64-Codierung. Ihre Daten werden mehr oder weniger der 33% aufgeblasen, so dass in einem riesigen Lager Auswirkungen führt, wohingegen bytea nicht den gleichen Nachteil hat

Damit ich diese Änderungen an Ihrem Modell vorschlagen:

class User_tbl(db.Model): 
    id = db.Column(db.Integer,primary_key=True) 
    mobile=db.Column(db.String(13),unique=True) 
    country=db.Column(db.String(30)) 
    image=db.Column(db.LargeBinary) 

Dann sind Sie Sie können Dateien in Postgres speichern, indem Sie einfach Ihren FileStorage Parameter als binären Wert übergeben:

image = request.files['fileimg'].read()