Wie, dann geht das bei dir jetzt ohne base64??? Bei mir funktioniert das einfach nicht... Wobei mein insert Befehl ist auch leicht anders:
'INSERT INTO test SET test_blob=%s'
"INSERT INTO TabellenName (data) VALUES (%s);"
Übrigends machst du zweimal ein f.close() (Zeile 69). Außerdem erwartet die execute Methode ein tuple und keine Liste. Also statt [data,] sollte es (data,) sein
bilder in eine mysql datenbank speichern
Hi Jens!
Also dass man auch eine Liste anstelle eines Tupels an execute weitergeben darf, habe ich getestet. Ist auch wesentlich angenehmer, dass ich viele Statements im Code dynamisch zusammensetze. Dies geht mit einem Tupel nicht.
Zweimal f.close() ist ein Versehen.
Das Einfügen eines Bildes habe ich so gemacht.
Code nur als Prinzipdarstellung:
Grüße und danke für die vielen Tipps
Jamil
Also dass man auch eine Liste anstelle eines Tupels an execute weitergeben darf, habe ich getestet. Ist auch wesentlich angenehmer, dass ich viele Statements im Code dynamisch zusammensetze. Dies geht mit einem Tupel nicht.
Zweimal f.close() ist ein Versehen.
Das Einfügen eines Bildes habe ich so gemacht.
Code nur als Prinzipdarstellung:
Code: Alles auswählen
f = file('C:\\Bild.jpg', 'rb')
blobdata = f.read()
f.close()
cursor.execute('INSERT INTO <table> SET test_blob=%s;', [blobdata,])
Jamil
Ich hab das ja schon oft gesehen und oft nachgefragt und ich will hier auch kein Fass aufmachen, aber ich hab es einfach noch nie verstanden: warum speichert man Bilder in einer SQL-Datenbank? Das bläht das ganze doch nur unnötig auf. Ich speichere in der Datenbank lediglich den Speicherort des Bildes samt Namen. Das kann ich dann schön in einer Query mit abfragen (z.B. zeig mir alle JPEGs oder alle im Ordner 'Britney'). Die Binärdaten des Bildes bringen mir doch i.d.R. gar nichts, außer wenn ich die Dateigröße abfragen will. Ich glaube, das Dateisystem, das im Prinzip ja auch eine Datenbank darstellt, ist für Binärdaten viel besser optimiert was die Performance anbelangt als jede SQL-Datenbank.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Sorry, hatte ich zuerst nicht gesehen. Die Serveranwendung besteht also lediglich aus der DB. Alles andere ist clientseitig implementiert. Richtig?JR hat geschrieben:Weshalb ich das mache, habe ich oben beschrieben.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Hi!
Ja, so ist es. Jedes Vereinsmitglied bekommt den Client zum Installieren. Die Daten liegen auf einem MySQL-Server. Sie werden zum einen in unserem Internetportal (Plone) angezeigt, können aber komfortabler über die Clientsoftware verwaltet werden.
Daten bestehen aus Personenverzeichnis, Flugerfassungen, Benutzerverwaltung etc.
Gruß
Jamil
Ja, so ist es. Jedes Vereinsmitglied bekommt den Client zum Installieren. Die Daten liegen auf einem MySQL-Server. Sie werden zum einen in unserem Internetportal (Plone) angezeigt, können aber komfortabler über die Clientsoftware verwaltet werden.
Daten bestehen aus Personenverzeichnis, Flugerfassungen, Benutzerverwaltung etc.
Gruß
Jamil
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Und ich mache es wegen dem nobody Problem, siehe: http://www.python-forum.de/post-49934.h ... body#49934
@JR: Was ich dir noch sagen wollte: Nach dem du ein Bild gelöscht hast, mußt du immer ein "OPTIMIZE TABLE" machen, damit der Speicherplatz auch frei wird.
Das mache ich bei mir in def delete():
http://pylucid.net/trac/browser/PyLucid ... ge.py#L592
@JR: Was ich dir noch sagen wollte: Nach dem du ein Bild gelöscht hast, mußt du immer ein "OPTIMIZE TABLE" machen, damit der Speicherplatz auch frei wird.
Das mache ich bei mir in def delete():
http://pylucid.net/trac/browser/PyLucid ... ge.py#L592
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
genau
Vielleicht auch noch interessant für dich def get_size_info():
http://pylucid.net/trac/browser/PyLucid ... ge.py#L426
Da wird die größen festgestellt und der Overhead ausgerechnet, anhand der gespeicherten echten Daten-Bytes im Vergleich zu der "Data_length" Angabe aus "SHOW TABLE STATUS"
Vielleicht auch noch interessant für dich def get_size_info():
http://pylucid.net/trac/browser/PyLucid ... ge.py#L426
Da wird die größen festgestellt und der Overhead ausgerechnet, anhand der gespeicherten echten Daten-Bytes im Vergleich zu der "Data_length" Angabe aus "SHOW TABLE STATUS"
Ne invoces expellere non possis
[url=xmpp://florian@florianheinle.de]xmpp:florian@florianheinle.de[/url]
[url=xmpp://florian@florianheinle.de]xmpp:florian@florianheinle.de[/url]
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
@fanus: Schau mal hier http://www.python-forum.de/post-48070.html#48070