conn.close() wann genau sinnvoll?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Stolzi
User
Beiträge: 155
Registriert: Mittwoch 18. August 2004, 15:44

Hi,
ich optimiere gerade eine meiner Klassen. Ich habe in der Klasse eine Funktion die mir eine Verbindung herstellt:

Code: Alles auswählen

def MysqlConn(self):        
        self.db = MySQLdb.connect(host=self.VdrHOST, user=self.MysqlUser, passwd=self.MysqlPass,db=self.MysqlDB)
        self.cursor = self.db.cursor()
und eine die sie mir schliesst:

Code: Alles auswählen

def CloseMysqlConn(self):
        self.db.close()
Im Moment öffnet sich jede der anderen Funktionen in der Klasse am Anfang eine Verbindung und schliesst sie dann wieder. Da aber eine Funktion teils 1000x aufgerufen wird halte ich es für nicht sonderlich effektiv jedes Mal die Verbindung neu zu öffnen, oder?

Die Variante, dass halt nur die aufrufende Funktion die Verbindung öffnet und schließt ist problematisch, da diese Funktionen teils direkt, teils von Überfunktionen aufgerufen werden.

Muss ich die Verbindung überhaupt schließen? Was bringt das eigentlich genau? Denn wenn ich das nicht muss, dann muss ich ja nur einmal eine Verbindung herstellen und diese dann immer verwenden.

Kann mir da mal wer weiterhelfen, der mehr davon versteht?

Danke
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Wenn da nicht massenhaft noch andere Klienten auf der Datenbank rumarbeiten genügt es, die Verbindung zu Beginn deines Programms zu öffnen und am Ende wieder zu schließen.
Stolzi
User
Beiträge: 155
Registriert: Mittwoch 18. August 2004, 15:44

Ok, danke. Aber wenn das Skript / Programm beendet ist wird die Verbindung automatisch beendet, oder?
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

nicht zwangsweise.

Du könntest aber z.B. eine Methode __exit__ definieren, wo die Verbindung geschlossen und das das with-statement benutzen.

Oder deinen mainloop in nen try, finally Block einschließen bei dem zum Schluss die Verbdinugn geschlossen wird.
Irgendwie so halt: TIMTOWTDI ;)
Antworten