grüble gerade an dem Problem, wie man eine Verbindung von einem GUI Frontend zur Datenbank aufbaut.
Ich sehe dazu zwei Möglichkeiten:
1. Wenn das Programm Daten in die Datenbank schreiben will, baut es eine Verbindung zur Datenbank auf. Dazu muss man den DSN der Verbindung zur Verfügung haben
2. Es wird eine Verbindung aufgebaut, die dann von den jeweiligen Aktionen genutzt wird. Dazu muss man aber der Verbindungsobjekt speichern.
Bei beiden Möglichkeiten besteht das Problem, die Daten der Verbindung so zu halten, das man jederzeit darauf zugreifen kann. Die Verwendung von globalen Objekten soll man aber vermeiden.
Die Anwendung:
Die GUI besteht aus einem Frame der je nach Funktion ein Panel (eigenständiges Modul) lädt. Die Daten werden im Panel bearbeitet und sollen dann in die Datenbank geschrieben werden, dazu besteht ein Modul, dass die gewünschten Funktionen zum schreiben und lesen der Datenbank zur Verfügung stellt. Diesen Funktionen werden die jeweiligen Daten für die DB-Abfrage übergeben, wenn man jetzt nicht mit einem globalen Verbindungsobjekt arbeiten will, dann muss auch noch die Verbindung als Parameter übergeben werden. Was bedeutet, dass das Panel von dem der Aufruf kommt das Verbindungsobjekt kennen muss. Dazu müsste in der Anwendung das Verbindungsobjekt durchgereicht werden, das erscheint mir als kompliziert.
Habe das ganze mal versucht mit einer statischen Klasse zu lösen, und glaube das es funktioniert. Man kann auf die Funktionen der Klasse zugreifen ohne vorher eine Instanz erzeugt zu haben, trotzdem hält sie die Verbindung persistent.
Code: Alles auswählen
class ConnectionPool():
con = []
dsn = ""
def setConnection(self,host,database,user,password):
ConnectionPool.dsn = "host=%s dbname=%s user=%s password=%s" %(host,database,user,password)
ConnectionPool.con.append(pg.connect(ConnectionPool.dsn))
def openConnection(self):
if ConnectionPool.con:
temp = ConnectionPool.con[0]
del ConnectionPool.con[0]
return temp
else:
return pg.connect(ConnectionPool.dsn)
def closeConnection(self,con):
ConnectionPool.con.append(con)
Irgendwie habe ich keine Lösung mit der ich glücklich bin, und will mich auch nicht in die falsche Richtung verrennen.
Wie wird sowas normalerweise gemacht, gibt es Beispiele?
Chistian