Seite 1 von 1

bytea: Cacheproblem in Postgres-DB

Verfasst: Montag 5. September 2011, 17:38
von andi24
Hallo zusammen,

ich speichere nach diesem Prinzip eine pdf-Datei in einer Postgres-Datenbank:

Code: Alles auswählen

# Datei einlesen
with open (mypdf,"rb") as f:
	filedata = f.read()
	filedata=filedata.encode("base64")


# DB-Verbindung herstellen
conn = initDBConn()
curs = createCursor(conn)


curs.execute("""UPDATE mytable SET pdfdatei=%(bytea)s;""",{'bytea' : psycopg2.Binary(filedata)})
conn.commit()

# DB-Verbindung schließen
closeConnection(conn)
Soweit funktioniert das auch gut. Nur wenn ich jetzt den Datensatz mit einem anderen pdf überschreiben möchte, habe ich jedes Mal wieder das alte pdf in der Datenbank.

Da das wohl zur Hälfte ein Python- zur anderen Hälfte ein Postgres-Problem ist, habe ich auch in einem Postgres-Forum einen Beitrag dazu veröffentlicht. Dort wird jedoch vermutet, dass pythonseitig vielleicht noch etwas gemacht werden muss.

Hat jemand von euch eine Idee, was ich hier falsch mache?

Vielen Dank für jeden Hinweis,

Andi

Re: bytea: Cacheproblem in Postgres-DB

Verfasst: Montag 5. September 2011, 18:00
von lunar
Der erste Fehler ist, dass der gezeigte Quelltext unvollständig ist. Wir können die Implementierung von "initDBConn()", "createCursor()" und "closeConnection()" schließlich nicht erraten, zeige also bitte vollständigen Quelltext, den jeder auch unverändert selbst ausprobieren kann.

Mehr kann man wohl erst sagen, wenn Du diesen Fehler behoben hast.

Ansonsten wäre es noch gut, einen Link zu Deiner entsprechenden Frage in einem Postgres-Forum zu zeigen. Und ist es wirklich Absicht, alle Datensätze der Tabelle zu aktualisieren, oder sollte da nicht noch irgendwo ein "WHERE" stehen?

Re: bytea: Cacheproblem in Postgres-DB

Verfasst: Mittwoch 7. September 2011, 17:12
von andi24
Hallo Lunar,

sorry, da hast Du natürlich recht. Hier der restliche Code:

Code: Alles auswählen

from __future__ import with_statement
import sys
import psycopg2
import psycopg2.extensions


def initDBConnection(): 
	dbhost = 'localhost'
	dbname = 'mydb'
	dbport = '5432'
	dbuser = 'myuser'
	dbpass = 'password'

	try:	
		connection = psycopg2.connect("dbname='" + dbname + "' user='" + dbuser + "' host='" + dbhost + "' port='" + dbport + "' password='" + dbpass + "'")
	except psycopg2.Error, e:
		print "Verbindung zur Datenbank konnte mit psycopg2 nicht aufgebaut werden."
		quit(1)
	return connection


def createCursor(connection):													 
	try:	return connection.cursor()
	except psycopg2.Error, e:
		print "Es konnte kein Cursor zur Datenbank gesetzt werden! "
		quit(1)

def closeConnection(connection):													
	connection.close()
Eine WHERE-Klausel habe ich natürlich schon noch drin. Die hab ich nur der Einfachheit halber weggelassen.

Re: bytea: Cacheproblem in Postgres-DB

Verfasst: Mittwoch 12. Oktober 2011, 12:43
von andi24
Hallo zusammen,

mein Problem besteht leider immernoch. Hat denn jemand eine Ahnung, was da los sein könnte? Oder braucht ihr noch mehr Informationen?

Viele Grüße, Andi

Re: bytea: Cacheproblem in Postgres-DB

Verfasst: Mittwoch 12. Oktober 2011, 12:56
von BlackJack
@andi24: Genug Informationen um nicht raten zu müssen. Wenn zum Beispiel die WHERE-Klausel auf keinen Datensatz zutrifft, dann hat das UPDATE natürlich auch keinen Effekt. Bist Du denn sicher dass Dein WHERE auch tatsächlich auf den gewünschten Datensatz zutrifft!?

Re: bytea: Cacheproblem in Postgres-DB

Verfasst: Donnerstag 13. Oktober 2011, 15:20
von andi24
Hallo BlackJack!

Ja, daran kann es leider auch nicht liegen. Ich gehe direkt auf eine id, die es auch sicher gibt.

Viele Grüße, Andi