[Python-de] PySQLite-Erfahrungen?

Gerhard Häring gh at ghaering.de
Die Aug 26 10:18:05 EDT 2003


Gherman wrote:
> Hallo,
> 
> ich schnueffle gerade in SQLite und seiner Python-Huelle herum.
> Von der Verpackung her zu urteilen (man muss sich, zumindest auf
> OS X und bei SQLite, noch ein wenig "die Finger schmutzig" machen)

Heisst was? Irgendwelche konkreten Verbesserungsvorschläge für PySQLite?

> wuerde ich sagen: so ultra-robust ist es vielleicht noch nicht,
> oder? Aber der Inhalt kann ja durchaus besser sein, als die Ver-
> packung... ;-)
> 
> PySQLite hat es da, natuergemaess, leichter, wenngleich man sich
> dabei auch z.B. nicht unbedingt wuenscht, die Doku selbst bauen
> zu muessen, zumal man dazu Links auf private Python-Interpreter
> aendern muss, etc...

Problem ist bekannt. Liegt am Dokumentationsformat (Python/LaTex) und 
ich wüsste nicht, wie man das viel besser lösen könnte. Da ich die Doku 
selber nicht geschrieben habe und auch LaTex nicht kann, steht evtl. mal 
ein Umstieg auf z. B. Docbook (kann ich halbwegs) oder ReSt an. Docbook 
ist von der Toolchain nicht unbedingt weniger krampfig als Python/LaTex, 
also würde es wohl ReSt werden. Oder einfach OpenOffice :)

> Daher also die Fragen: wie aktiv wird an diesen Paketen gearbeitet,
> was ist zu erwarten, wer hat welche Erfahrungen damit gemacht?

An PySQLite 0.4.x wird so aktiv gearbeitet, wie es nötig ist :) Es sind 
seit Ewigkeiten von Benutzern keine Bugs mehr gefunden worden, die ich 
nicht bereits zuvor im CVS gefixt hätte. Also ist es wohl relativ stabil ;-)

0.4 ist für mich der stabile Branch, an dem auch nur noch Bugfixes 
einfliessen werden.

0.5 wird eine komplette Neuentwicklung von PySQLite werden, und ich bin 
momentan noch am Experimentieren. Das Ziel ist bestmögliche Performance, 
weil das für einige Anwendungsbereiche nötig ist. Das heisst im 
Umkehrschluss übrigens nicht, dass die jetzige Implementierung zu 
langsam ist. Ich tendiere im Moment dazu, alles in PyRex neu zu 
schreiben und das PgResultSet, das ich aus pyPgSQL importiert habe, 
durch db_row [1] zu ersetzen.

> Ist die API speziell von PySQLite kompatibel zum Python-Datenbank-
> Interface?

Ein Plus von PySQLite ist m. E. nach die ziemlich umfangreiche 
Testsuite. Es gibt momentan 114 Tests, wovon sich auch ein paar mit der 
DB-API befassen. Ansonsten kann ich sagen, dass PySQLite relativ 
kompatibel zu pyPgSQL ist (wurde ja viel davon geklaut) ;-)

> Wozu taugt (Py)SQLite definitiv nichts? 

Ich persönlich würde es nicht für Webprojekte oder allgemein 
Multiuserprojekte einsetzen (wenn ich so was mache, hab ich vernünftige 
Server mit Apache+PostgreSQL). Was scheinbar andere Leute nicht davon 
abhält, das relativ erfolgreich zu tun (z. B. PyPI auf python.org). Ich 
hab für diesen Anwendungsbereich mittlerweile auch die relevanten SQLite 
Funktionen gewrappt. Im einfachsten Fall übergibst du beim .connect 
einfach einen Timeout-Parameter:

cx = sqlite.connect("c:/tmp/db", timeout=5000) # 5 Sekunden Timeout

Da SQLite auf eine Datei zugreift, wird diese bei Schreiboperationen 
bzw. Transaktionen komplett gesperrt. Solange diese Transaktion offen 
ist, kann kein anderer Prozess auf diese Datenbank zugreifen, auch nicht 
lesend. Der timeout-Parameter gibt an, wie lange maximal gewartet werden 
soll, bis die Sperre auf die Datei freigegeben worden ist. Nach dem 
Timeout gäbe es dann was Lustiges wie "_sqlite.OperationalError: 
database is locked".

Allgemein sind längere Transaktionen bei einer "richtigen" 
Multiuserdatenbank kein Problem, wärend man bei (Py)SQLite da aufpassen 
muss.

> Immerhin ist Gerhard Haering von dieser Liste einer der Betreuer von
> PySQLite.

Ich bin de-fakto seit einem Jahr der einzige Maintainer :-D

-- Gerhard