SQL Module für Python - nur welches?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
SteeWeeDee
User
Beiträge: 34
Registriert: Donnerstag 18. September 2008, 14:10

Hallo!

Ich suche für Python ein MySQL Modul, damit Python mit MySQL Datenbanken arbeiten kann.

Gefunden habe ich bis jetzt folgende Variationen:

-) SQLite3: Gut und für kleine Datenmengen und Testzwecken - jedoch keine Server/Client Unterstützung. Diese wird für mein Projekt nicht explizit gefordert, allerdings Erweiterbarkeit wäre es schon gut dieses Feature an Bord zu haben. Daher nicht brauchbar.

-) MySQLdb: Hat Server/Client Unterstützung, jedoch datiert die aktuellste Version auf sourceforge vom 30 März 2009 (http://sourceforge.net/projects/mysql-python/files/).

Nun zu meiner Frage: Ist MySQLdb brauchbar? Kennt jemand bessere Alternativen? Im Grunde werden ja alle gleich funktionieren oder? Nämlich mit Connect() ein Objekt erzeugen und anschließend mit cursor() ein Verbindungsobjekt generieren. Das wird dann mit den SQL Syntax ausgeführt.

Danke schon mal im Voraus für die Hilfe! :)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

SteeWeeDee hat geschrieben:-) SQLite3: Gut und für kleine Datenmengen und Testzwecken - jedoch keine Server/Client Unterstützung. Diese wird für mein Projekt nicht explizit gefordert, allerdings Erweiterbarkeit wäre es schon gut dieses Feature an Bord zu haben. Daher nicht brauchbar.
SQLite hat mit MySQL nix zu tun, das ist eine eigene SQL-Datenbank.

Wenn es nicht umbedingt MySQL sein muss und SQLite nicht ausreicht, rate ich zu PostgreSQL und als Adapter dann psycopg2.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo SteeWeeDee!

Ich halte das so: Für die Datenhaltung auf dem Desktop nehme ich SQLite mit dem in Python 2.6 mitgelieferten *sqlite3*-Modul. Und für Client/Server nehme ich PostgreSQL mit *psycopg2*.

Beide haben ihre Vor- und Nachteile.
SQLite ist z.B. superschnell und einfach gehalten. Kann aber nicht gut mit mehreren schreibenden Connections umgehen. Wenn sowiso nur das eigene Programm mit nur einer oder wenigen Connections auf die DB zugreift, dann braucht man das sowiso nicht. Also ist SQLite für Desktopanwendungen meist ideal.

PostgreSQL ist ein ausgewachsenes Datenbankmanagementsystem, das sehr gut mit vielen gleichzeitigen Verbindungen (Connections) umgehen kann. Es bietet ein Authentifizierungs- und Berechtigungssystem, serverseitige Vorverarbeitung der Daten (Funktionen, Views, Regeln,...) und ist hervorragend für Client/Server-Anwendungen geeignet. Dieser Overhead kostet natürlich etwas Performance. Außerdem muss man solche DBMS als Administrator installieren und kann sie nicht einfach nur als Datei verteilen.

SQLite -> Desktop

PostgreSQL -> Server

mfg
Gerold
:-)

PS: Fast hätte ich es vergessen... So eine SQLite-Datenbank kann locker ein Gigabyte groß werden, ohne dass SQLite damit ein Problem hat. Es ist also nicht richtig, dass SQLite nur für kleine Datenmengen geeignet sei.

.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
SteeWeeDee
User
Beiträge: 34
Registriert: Donnerstag 18. September 2008, 14:10

Danke für die Antworten!

MySQLdb ist ja nicht unter den Vorschlägen, ist das nicht so brauchbar oder aus welchem Grund?

PostgreSQL und als Adapter dann psycopg2:
Also beide Pakete installieren und was muss anschließend importiert werden? Wo bestehen denn die Unterschiede zwischen PostgreSQL s undMySQLdb?

Aber ich werde mir PostgreSQL mal ansehen. Gibt es eine gute Seite dafür? Mit Beispielen wenn es geht?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

SteeWeeDee hat geschrieben: MySQLdb ist ja nicht unter den Vorschlägen, ist das nicht so brauchbar oder aus welchem Grund?
Das RDMS MySQL ist bei vielen nicht so gut angesehen, da MySQL einige Fallstricke parat hält. u.a. hinkt(e) es dem SQL99-Standard hinterher, den PostgreSQL seit langem unterstützt, desweiteren sind gewisse Funktionen bei MySQL von der darunter verwendeten Storage-Engine abhängig (Mann kann zwischen mehreren wählen). So etwas stört eben bei vielen Anwendungen, wenn man gezwungen wird, sich für oder gegen ein eigentlich benötigtes Feature zu entscheiden, weil sonst andere wichtige Dinge nicht klappen.
PostgreSQL und als Adapter dann psycopg2:
Also beide Pakete installieren und was muss anschließend importiert werden?
PostgreSQL ist ein Datenbankmanagementsystem! Natürlich gibt es dafür auch "Pakete" (z.B. für Linux-Distris), aber es ist natürlich kein Python-Modul. Obiges klang jetzt ein wenig durcheinander - mag aber auch sein, ich habe da zu viel Unwissen heraus gelesen ;-)
Wo bestehen denn die Unterschiede zwischen PostgreSQL s undMySQLdb?
Naja, das sind eben Module für den Zugriff auf zwei verschiedene RDMS! Wo ist der Unterschied zwischen OpenOffice und M$ Office? Oder einem Audi A4 und einem Passat?
Aber ich werde mir PostgreSQL mal ansehen. Gibt es eine gute Seite dafür? Mit Beispielen wenn es geht?
Also die offizielle Seite sollte sich leicht finden lassen ;-) Dort gibt es ein umfassendes Handbuch, iirc auch mit User-Kommentaren.

Solltest Du aber noch keine Ahnung von Datenbanken haben, so würde ich Dir doch mal ein Buch empfehlen und dann erst einmal mit SQLite rumspielen. Einen Datenbank-Server sicher aufsetzen ist kein Kinderspiel. Die grundlegenden Paradigmen von SQL lassen sich auch mit SQLite prima aneignen - wir setzen in der Lehre z.B. SQLite in Verbindung mit einem Firefox-Plugin ein:
http://code.google.com/p/sqlite-manager/

Simpel zu installieren und loslegen :-)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

SteeWeeDee hat geschrieben:MySQLdb ist ja nicht unter den Vorschlägen, ist das nicht so brauchbar oder aus welchem Grund?
Also schau:

MySQL = Datenbank
MySQLdb = Modul mit dem man aus Python heraus auf MySQL (Datenbank) zugreifen kann.

Analog dazu:

SQLite = Datenbank
PySQLite = Modul mit dem man aus Python heraus auf SQLite (Datenbank) zugreifen kann. Ist in der Python Stdlib integriert und muss nicht explizit installiert werden.

PostgreSQL = Datenbank
psycopg2 = Modul mit dem man aus Python heraus auf PostgreSQL (Datenbank) zugreifen kann.

Warum niemand was über MySQLdb sagt: erstens ist das Python-Modul nicht so besonders gut maintained und zweitens kann man sich damit ja nur zu MySQL verbinden, und MySQL ist hier relativ unpopulär, weil mit PostgreSQL eine bessere Alternative bereitsteht, die auch eine bessere Python-Anbindung hat.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten