Announcement

Collapse
No announcement yet.

BLOBs in MySQL speichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • BLOBs in MySQL speichern

    Vor diesem Problem stehen Entwickler häufiger: Binäre Daten sollen in einer Datenbank abgelegt werden. Obwohl das Ganze nicht weiter schwierig ist, scheint nicht jedem Anwender auf Anhieb klar zu sein, wie man dieses Vorhaben in die Tat umsetzt. Am Beispiel von <i>MySQL</i> und Python soll auf einfache Art und Weise demonstriert werden, wie Sie vorgehen könnten.

    Was braucht man für diese Aufgabe? Das RDBMS <i>MySQL</i> muß natürlich installiert sein, ebenso die Programmiersprache Python und last not least das Python-Modul <i>MySQLdb</i>. Dieses Modul von A. Dustman findet man im Netz unter [1].

    Das untenstehende Python-Programm speichert eine Grafik (*.jpg) in einer <i>MySQL</i>-Tabelle ab. Anschließend wird testweise dieselbe Grafik aus der Datenbank ausgelesen. Hier ist das Listing:
    <PRE>
    #!/usr/bin/env python

    import MySQLdb

    if __name__ == '__main__':

    FP = open('pfad/zur/Grafik', 'rb')
    con = MySQLdb.connect(host="localhost", user="ich", passwd="geheim", db="bildDB")

    bindata = FP.read()

    cur = con.cursor()
    cur.execute("UPDATE meineTabelle SET bild=%s WHERE id=45", (bindata,)) # Bild einlesen
    cur.execute("SELECT bild FROM meineTabelle WHERE id=45") # Bild auslesen

    row = cur.fetchone()
    retrieved_bindata = row[0]

    assert retrieved_bindata == bindata

    con.close()
    FP.close()
    </PRE>
    Bevor Sie dieses kleine Programm starten, müssen Sie eine neue Datenbank (inklusive Tabelle) anlegen und die Verbindungsparameter im Programm anpassen. Schauen Sie gegebenenfalls in die <i>MySQL</i>-Dokumentation. Es ist unbedingt darauf zu achten, dass der passende Datentyp für die BLOB-Zeile verwendet wird (zum Beispiel <i>MEDIUMBLOB</i>).

    Nun ein paar Worte zum Programm selbst. Zuerst öffnet man eine Bild-Datei (Sie können auch andere binäre Daten verarbeiten) im Binär-Mode (<i>'rb'</i>). Danach muss das Connection-Objekt, die Verbindung zum Server, erzeugt werden. Die zuvor geöffnete Bild-Datei wird jetzt der Variablen <i>bindata</i> zugewiesen.

    Mit Hilfe des Connection-Objektes werden zwei Queries an den <i>MySQL</i>-Server abgesetzt. Zuerst wird die Tabelle aktualisiert (das <i>UPDATE</i>-Statement). Die Id in diesem SQL-Statement dient nur zur Veranschaulichung.

    Danach wird die Grafik wieder ausgelesen. Die <i>assert</i>-Anweisung vergleicht schließlich beide Dateien. Ist ein Fehler aufgetreten, wird auf der Konsole eine Meldung ausgegeben.

    Apropos, <i>BLOB</i> bedeutet nichts weiter als "Binary Large Object". Viel Erfolg beim Probieren.

    Thomas Kaufmann

    Links:

    [1] http://sourceforge.net/projects/mysql-python
Working...
X