pysqlite connection schliessen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Montag 19. Juni 2006, 21:03

Hallo

http://www.python-forum.de/topic-6157.h ... t=pysqlite
In diesem Thread wird nach dem lesen wie auch nach dem schreiben die Verbindung unterbrochen (geschlossen). Was ist der Sinn davon?

Grossen Programmen kann ich as verstehen, dann muss man nicht immer jeder Funktion die Connection und der Cursor mitgeben. Aber in diesem kleinem Beispiel

Code: Alles auswählen

conn = sqlite3.connect(
    "dateiname.s3db",
    isolation_level = None, # Autocommit
) 
Und für was ist das isolation_level ?

Gruess DM
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 19. Juni 2006, 21:34

DatenMetzgerX hat geschrieben:http://www.python-forum.de/topic-6157.h ... t=pysqlite
In diesem Thread wird nach dem lesen wie auch nach dem schreiben die Verbindung unterbrochen (geschlossen). Was ist der Sinn davon?
Hi DM!

Ich demonstriere in diesem Beispiel ZWEI Möglichkeiten, auf eine Datenbank zuzugreifen. Schreibend und lesend. Dass dazwischen die Verbindung unterbrochen wird, dient nur zum Demonstrieren der Unabhängigkeit. Man sieht dadurch, dass die Daten in einer Datei sind und nicht in irgendeiner Variable zwischengespeichert bleiben. Außerdem wollte ich auch die Unterschiede beim Öffnen der Datenbank demonstrieren. Einmal mit "AutoCommit" und einmal nur zum Lesen.

Ich bin davon ausgegangen, dass jedem klar ist, dass ein direkt aneinander gereihtes Schließen und Öffnen der Datenbank so ansonsten keinen Sinn ergibt.

http://docs.python.org/dev/lib/module-sqlite3.html

Da findest du sicher auch eine Erklärung zum "isolation_level".

mfg
Gerold
:-)
Zuletzt geändert von gerold am Montag 19. Juni 2006, 21:40, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 19. Juni 2006, 21:40

DatenMetzgerX hat geschrieben:Grossen Programmen kann ich as verstehen, dann muss man nicht immer jeder Funktion die Connection und der Cursor mitgeben.
Hi DM!

Hierzu auch noch ein paar klärende Worte:

Gerade bei großen Programmen, die oft auf die Datenbank zugreifen, kümmere ich mir intensiv darum, die Verbindung offen zu halten und weiterzugeben. Das Öffnen der Verbindung verbraucht ziemlich viel Zeit. Das kann man dadurch umgehen.

Teilweise gehe ich bei Datenbankprogrammen sogar so weit, dass ich einen richtigen ConnectionPool aufbaue und mir daraus die Verbindungen ausleihe. Zuerst sperren, Verbindung holen, verwenden und dann wieder entsperren.
Ob das bei SQLite Sinn macht, wage ich zu bezweifeln, aber beim Microsoft SQL-Server brigt diese Vorgehensweise einen *enormen* Geschwindigkeitsgewinn.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Montag 19. Juni 2006, 21:43

soviele abfragen werden es wohl nicht sein ;)

einmal beim start und beim beenden. Evtl. noch zwischendurch für kleinere Änderungen

Ok, habe das ganze, glaube ich, verstanden :D
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 19. Juni 2006, 22:09

DatenMetzgerX hat geschrieben:soviele abfragen werden es wohl nicht sein ;)
Hi DM!

:twisted: Als ich das letze Mal, ich glaube so vor einem Jahr, die Tabellen meines Kassen- und Warenwirtschaftsprogrammes gezählt habe, waren es so um die 120 Stück. Wie viele Prozeduren, Views und Funktionen in der Datenbank definiert waren, weiß ich jetzt nicht mehr. Allerdings glaube ich, dass es mehr als 200 sind.

Was passiert, wenn jemand bei einem Kassenprogramm eine Zahl eingibt, die entweder ein Barcode, ein PLU-Code oder eine Artikelnummer sein können? Das Programm oder die Datenbank muss in der Barcode-Tabelle, in der PLU-Code-Tabelle und wenn es blöd kommt noch in der Artikeltabelle nach dem Artikel suchen. Ist der Artikel gefunden, müssen die Informationen über den Artikel an das Programm zurück gegeben werden. Diese werden verwendet um eine neue Buchung als Bondetail in die Datenbank zu schreiben. Usw...

Du siehst, in einem größeren Datenbankprogramm kann bei einer einzigen Eingabe des Benutzers ziemlich oft auf die Datenbank zugegriffen werden. Wenn da jedes mal die Verbindung neu aufgebaut werden müsste, dann spürst du das als Benutzer sofort. Und das im negativen Sinne.

Nur um eine praktische Anwendung aufzuzeigen. In solchen Fällen rentiert sich ein ConnectionPool auf jeden Fall.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten