Python 3 und Django – Abenteuer MySQL
Es scheitert an der Datenbank…
Ich bin ein Freund von Python 3 und würde mir am liebsten wünschen, dass es Python 2 gar nicht mehr gäbe; so viel ist besser geworden in Python 3! Neuerdings gibt es ja Django 1.5 offiziell auf PyPi, welches ebenso offiziell experimentell Python 3 unterstützt.
Ich spielte also gestern Abend mit dem Gedanken, ein privates Webprojekt, an welchem ich momentan mit Pyramid schreibe, eventuell auf Django umzustellen. Pyramid ist ebenso ein größeres Python-Webframework, welches aber an sich nur Schnittstellen bereitstellt. So benutzt man beispielsweise als ORM dann SQLAlchemy und so etwas wie Standard-Models gibt es auch nicht. Das erfordert allerdings auch, dass man sich auch mit Pyramid beschäftigt – aber es lässt einem viele Freiheiten. Die Schnittstellen sind dabei aber sehr flexibel und Pyramid soll laut Benchmarks etwa ⅓ (Yay, Unicode!) schneller sein als Django. Im Vergleich dazu ist Django aber ohnehin mindestens doppelt so schnell wie Ruby on Rails – welches bei vielen Entwicklern ja feuchte Träume auslöst – und vor allem gegenüber Symfony2, wo ich irgendeinen Benchmark sah, wo Pyramid 12× so schnell ist wie Symfony2. Von daher denke ich, dass selbst Django als full-stack-Framework keine schlechte Wahl ist. Wer jetzt an das Argument denkt, dass Entwicklungsdauer viel wichtiger ist als eine Website, welche 50ms schneller reagiert, der kennt Python nicht.
Für mein eben erwähntes Webprojekt nutze ich momentan SQLAlchemy und MySQL über OurSQL. OurSQL ist eine schnelle API für Python um auf MySQL zugreifen zu können. Mit Python 2 gab es damals eine quasi Standard-API für MySQL namens MySQLdb, die es aber nicht für Python 3 gibt und es wohl auch nie geben wird. Natürlich gibt es noch viele weitere APIs für MySQL, aber mit OurSQL habe ich einfach die besten Erfahrungen gemacht und es läuft einfach auch sauber: Auf Linux ebenso wie auf Windows. SQLAlchemy hat da als Beispiel schon von Haus aus Bindungen für OurSQL. Bei Django sieht es da anders aus…
Man merkt bei Django 1.5 deutlich, dass es nach wie vor ein Python 2 Framework ist. Viel zu deutlich. So gibt es beispielsweise für MySQL nur Bindungen für MySQLdb, was ja, wie eben erwähnt, nicht mehr weiterentwickelt wird für Python 3. Und OurSQL? In der Tat gab es da auf Github ein Projekt, welches aber seit seit mindestens einem Jahr nicht mehr aktualisiert wurde. Ich probierte es dennoch aus und ich bekam den Eindruck, dass es für Django 1.1 geschrieben wurde, denn es funktionierte nichts kaum etwas. Gutmütig wie ich war, schaute ich mir die Codebasis von dem Modul an und versuchte, die Fehler zu korrigieren… Zumindest funktionierte dann schon einmal das Starten der Django-App, aber das war es dann auch schon wieder. Beim Anlegen der Datenbank durch Django gab es den nächsten Fehler und dann ging mir die Lust aus – ich habe keine Lust auf Frickelware.
Weiterhin gutmütig versuchte ich es mit einer anderen Datenbank-API namens PyMySQL. Allerdings ließ mich die Anzahl der Issues auf Github schon schmunzeln und ich wurde von meiner Vorstellung nicht getäuscht: Es war ebenso Frickelware. Dass das Projekt an sich erst einmal Python 2-Syntax hatte, war ja nicht das Problem – Python hat ja ein Script dafür, um Python 2 Code nach Python 3 zu portieren und das läuft ziemlich anständig. Nur brachte das alles nichts, denn beim Installieren über Distribute gab es irgendein Problem beim Deserialisieren. Da dieses Paket aber kein C Paket war, kopierte ich es einfach manuell nach site-packages. Was im Endeffekt aber nichts brachte, denn Django erkannte das Paket nicht und auch beim Ablauf in Django, wie Django das Modul einbindet, fragte ich mich, ob der Autor überhaupt das Richtige in seine Dokumentation geschrieben hat. Vermutlich hätte man mit mehr Frickelei das Ganze zum Laufen bekommen, aber ich hatte darauf nun keine Lust mehr.
Und somit bleibe ich webtechnisch mit Python beim Web-Framework Pyramid. Vielleicht schafft es ja Django in Zukunft, sich mehr auf Python 3 auszurichten. Nur bis das geschehen ist, habe ich dieses Webprojekt wohl längst fertig.
Hallo, Danke für den ausführlichien Beitrag und Deine Einschätzung zum jungen Django 1.5 auf Python 3. Gut auch mal kritische Stimmen zu hören :-) und viel Erfolg weiterhin bei Deinem Webprojekt. Schöne Grüße