Seite 1 von 1

Blob wird nicht in die DB geschrieben

Verfasst: Montag 7. Dezember 2009, 07:39
von campino
Guten morgen zusammen,

ich programmiere gerade eine Webanwendung mit Python und MySQLdb. Nun möchte ich gerne ein paar Files direkt in der Datenbank als BLOB speichern. nur habe ich das Problem, dass das ganze nciht so will wie ich das will.

Vorgehensweise:

1. Upload der Datei auf den Server (funktioniert)
2. einlesen der Datei als Binary (funktioniert)
3. Erstellen des MySQL insert befehls (funktioniert)
4. ausführen des Insert Befehls (funktioniert nicht)

Code: Alles auswählen

ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\x0e\x8f\xd1Z\x7f\x1e\x7fRD\xba\xf5uW\xbdj\x7fr\\$\x97\xa1\x04\xb3ju\x17\x0e\xeeT\xe7\xa8\xff' at line 1")
das kommt beim einfügen in die DB als Fehler. das Escapen der "\" habe ich auch schon versucht einmal mit MySQLdb.Binary() oder auch mit MySQLdb.escape_string bzw auf die holzhammermethode bin.replace("\\","\\\\")

Das hat aber leider alles nicht funktionert. Ich hänge hier nun schon seit donnerstag fest und weiß nicht mher weiter.

Die Dateien die gespeichert werden sollen sind entweder jpg, png oder pdf falls das was zur ache tut.

Vielen Dank für eure Hlfe

Gruß
Alexander

Verfasst: Montag 7. Dezember 2009, 08:15
von tordmor

Verfasst: Montag 7. Dezember 2009, 08:24
von campino
hmm das habe ich auch schon probiert gehabt

Code: Alles auswählen

"INSERT INTO `release`.`attachment` (`ID`, `filename`, `mimetype`, `data`) VALUES (NULL, 'test', 'image/jpeg', '<binarydata>');"
das hier ist mein SQL statement welches ich ausführen möchte.

wenn ich das jetzt mit

Code: Alles auswählen

cursor.execute("INSERT INTO `release`.`attachment` (`ID`, `filename`, `mimetype`, `data`) VALUES (NULL, '" + str(fn[0]) + "', '" + str(m[0]) + "', '%s');", bin)
bzw auch mit

Code: Alles auswählen

cursor.execute("INSERT INTO `release`.`attachment` (`ID`, `filename`, `mimetype`, `data`) VALUES (NULL, '" + str(fn[0]) + "', '" + str(m[0]) + "', '%r');", bin)
ausführe erhalte ich den selben Fehler

Verfasst: Montag 7. Dezember 2009, 10:33
von campino
ich glaube ich kann den Fehler etwas einschränken. Er scheint nur bei dateinen aufzutreten welche ungefähr über vierKiB groß sind (ob die grenze genau bei vier KiB liegt kann ich nicht genau sagen) gibt es dort irgendwo bei mySQL oder Python eine Einstellung dafür?

ich kann auch die größeren Dateiein nciht mehr fehlerfrei auslesen. die danach erstellten Dateien sind alle nur noch genau 4.096 Bytes groß der Rest fehlt einfach...

Verfasst: Montag 7. Dezember 2009, 14:30
von tordmor
Schein ein mysql Problem zu sein.

Verfasst: Dienstag 8. Dezember 2009, 07:43
von campino
hmmm ok und wie kann ich das beheben bzw. ändern??

//Edit
macht es einen unterschied, dass das Feld in der DB ein LONGBLOB ist?

//Edit2

hier ist die Lösung für mein Problem zumindest was die inserts angeht (selects hab ich noch nicht testen können)
http://mail.python.org/pipermail/python ... 39172.html

Verfasst: Dienstag 8. Dezember 2009, 13:50
von Hyperion
Ich würde vorschlagen auf Blobs zu verzichten und nur Links auf ein Dateisystem zu speichern :-)

Verfasst: Dienstag 8. Dezember 2009, 13:59
von campino
dass man die dateinen normalerweise im filesystem speichern sollte ist mir an sich schon klar nur müssen die daten hier auf 7 verschiedenen Servern bereitstehen und die datenbank wird schon überallhin repliziert und die Filestruktur müsste ich erst wieder als synchronisation einrichten von demher ist das so der einfachere Weg und es funktioniert ja jetzt

Verfasst: Dienstag 8. Dezember 2009, 14:13
von Hyperion
campino hat geschrieben:dass man die dateinen normalerweise im filesystem speichern sollte ist mir an sich schon klar nur müssen die daten hier auf 7 verschiedenen Servern bereitstehen und die datenbank wird schon überallhin repliziert und die Filestruktur müsste ich erst wieder als synchronisation einrichten von demher ist das so der einfachere Weg und es funktioniert ja jetzt
Hm, ja, heterogene und gewachsene Strukturen sind da natürlich ein Problem :-)

Verfasst: Dienstag 19. Januar 2010, 22:05
von noisefloor
Hallo,

wenn es keine SQL-Datenbank sein muss: http://couchdb.apache.org.

Da sind Attachments total easy going und werden zusätzlich auch noch revisioniert. :-)

Gruß, noisefloor