SQLite - Database is locked/Speicherzugriffsfehler

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
ich denke nicht, dass der OP mit sqlite ernsthafte Probleme bekommen wird, sofern sein Szenario nicht aussergewoehnlich ist.
Womit wir wieder da sind, was ich oben schon mal gesagt habe: Wir brauchen mehr Infos vom OP.

Gruß, noisefloor
deets

noisefloor hat geschrieben:Hallo,
ich denke nicht, dass der OP mit sqlite ernsthafte Probleme bekommen wird, sofern sein Szenario nicht aussergewoehnlich ist.
Womit wir wieder da sind, was ich oben schon mal gesagt habe: Wir brauchen mehr Infos vom OP.
Na mensch, gut, dass wir doch noch was gefunden haben, was du richtig gesagt hast, gell? :roll:
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

genau. Und eigentlich wollte ich genau das von dir bestätigt haben :roll:

So, und jetzt poste ich hier nicht mehr, bevor... ihr wisst schon. :wink:

Gruss, noisefloor
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Kinder, mal etwas runterkommen. Gilt für alle Beteiligten. ;) Wir sind ja alle auf der selben Seite*.

* Außer natürlich ihr seit jetzt fiese Appleianer oder Android-Fanboys, denn das einzige richtige OS is natürlich Firefox OS. SCNR
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Na da hab ich ja was ins rollen gebracht. Vielen Dank schonmal für die Antworten und entschuldigt für die späte antwort. Wie ihr schon richtig erkannt habt, habe ich noch nicht soo viel Erfahrungen mit Datenbanken.
Ich habe jetzt für jeden Thread eigene Verbindungen aufgemacht, aber brauche wohl noch bis morgen um das weiter zu testen.

Meine Datenbank ist jetzt nicht übermäßig groß, aber in den verschiedenen Threads gibt es eben doch nicht nur Lesezugriffe, sondern teilweise auch Schreibzugriffe. SQLite sollte meinen Ansprüchen auf jeden Fall genügen.

Wie wichtig ist es eigentlich die Verbindungen wieder zu schließen? Weil ich bei mir Probleme habe diese zu schließen, da ich sie nicht ausversehen zu früh schließen möchte.
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: 3856
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