SQLite - Database is locked/Speicherzugriffsfehler

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
lunar

@Trubinial Guru Verwende doch am besten SQLAlchemy, denn diese Bibliothek nimmt Dir das sogenannte "Connection pooling" ab, also das Erzeugen und Vorhalten von Datenbankverbindungen, die Zuweisung derselben an Threads, und das schlussendliche Schließen. Den Rest dieser Bibliothek musst Du je erst mal nicht verwenden, es reicht erst mal, wenn Du Deine Datenbankverbindungen über SQLAlchemy aufbaust.

Das ordentliche Schließen von Datenbankverbindungen ist wichtig. Ansonsten kann es geschehen, dass Transaktionen nicht abgeschlossen werden, und Daten somit nicht in die Datenbank geschrieben werden.
Benutzeravatar
noisefloor
User
Beiträge: 3857
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Wie wichtig ist es eigentlich die Verbindungen wieder zu schließen?
Wichtig, weil dir bei jeder DB sonst irgendwann die Verbindungen ausgehen - und dann hängt die Applikation oder wirft einen Fehler.

Die Punkte 5 und 6 der SQLite FAQs erklären das für SQLite ganz gut.

SQLAlchemy ist unter Python in Kombination mit relationalen Datenbanken aber immer ein guter Tipp, siehe Lunars Posting.

Gruß, noisefloor
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Leonidas hat geschrieben: * Außer natürlich ihr seit jetzt fiese Appleianer oder Android-Fanboys, denn das einzige richtige OS is natürlich Firefox OS. SCNR
Am besten ist natürlich das OS des C64. Stürzt das mal ab, so ist es nach <1 Sek wiederhergestellt!!! Da können diese neumodischen mobilen Beschäftigungstherapiesysteme einfach nicht mithalten... :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Tausend Dank für den sqlalchemy Tipp. Schade dass ich nicht schon vorher Wind davon bekommen habe. Nach dem Umstieg auf sqlalchemy und einigem testen scheint alles wunderbar zu funktionieren.

Das einzige Problem ist nun, dass zwei Threads, die eigentlich nur im Hintergrund arbeiten und deren Datenbank-Zugriffe keine Priorität haben sollten, manchmal die Verbindungen blockieren und der Hauptprozess auf das Beenden der Verbindung im Thread warten muss. Gibt es da eine einfache Möglichkeit, dass die Verbindungen der Threads benachteiligt werden und nur dann laufen, wenn gerade kein anderer Verbindungs-Versuch läuft?

Ich bin in der Dokumentation den Teil über Connection Pooling durchgegangen, blicke aber irgendwie nicht ganz durch.
Vielen Dank nochmal!
Antworten