Sqlite Locks

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Hey,

ich greife via sqlalchemy auf eine sqlite3-Datenbank zu. Leider bekomme ich einen OperationalError (database is locked).

Ich versuche in zwei Threads in die Datenbank zu schreiben. Gibt es da einen way-to-do um solche Fehler zu vermeiden?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
deets

Keine threads bzw. nur einen verwenden, weil sqlite damit eh nicht umgehen kann - bestenfalls benutzt es locks & serialisiert deine Zugriffe eh.
lunar

@jbs: Das sqlite-Modul in der Standardbibliothek unterstützt keine threadsicheren Verbindungen, und erlaubt mithin nicht, eine Verbindung zwischen mehreren Threads zu teilen. Du musst jedem Thread seine eigene Datenbankverbindung zukommen lassen.

Je nachdem, wie viele Threads zu hast, ist das allerdings wenig performant, da SQLite Schreibzugriffe auf Datenbanken nur schwerlich parallelisieren kann. Mit einer klassischen Consumer-Producer-Architektur, in der nur ein Thread die Datenbank beschreibt, und alle anderen Threads diesem ihre „Aufträge“ über eine Queue mitteilen, bist Du dann wahrscheinlich besser bedient.

@deets: SQLite kann – sofern entsprechend kompiliert – durchaus eine Datenbank mehreren Threads zur Verfügung stellen, und – zwar langsam, aber möglich – sogar Datenbankverbindungen zwischen Threads teilen. Das allerdings unterstützt der Datenbankadapter in der Standardbibliothek laut Dokumentation nicht.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

And just another Queue to add.

Danke für die Antworten.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Antworten