Hat jemand schon Erfahrungen mit ADOdb auf Python-Basis gemacht? Es wurde ja ursprünglich für PHP entwickelt und auf Python ausgeweitet. Daher soll es nicht sooo gut wie die Version für PHP sein. Ein Mythos oder Wirklichkeit?
Würde ADOdb zukünftig gerne einsetzen, um Programme etwas unabhängiger von der verwendeten Datenbank zu machen, würde aber vorher gern ein paar Erfahrungsberichte hören. Danke!
Erfahrungsberichte: ADOdb auf Python
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
hättest du einfach mal im Forum gesucht, würdest du auf http://www.python-forum.de/viewtopic.php?t=2039 gestoßen sein 

Wil es auf Python portiert wurde und deshalb eigentlich nicht nativ drauf ausgerichtet ist. Außerdem hat PHP für viele Datenbanken bereits eigene Standard-Befehle, die ADOdb einfach vereinheitlicht.
Bei Python gibt es meistens verschiedene Wrapper für die Datenbanken. Manchmal gibt es sogar mehrere... und sie müssen als Modul eingebunden werden, was eben Abhängigkeiten erzeugt. Ist bei PHP alles nicht der Fall. Deshalb die Frage.
Bei Python gibt es meistens verschiedene Wrapper für die Datenbanken. Manchmal gibt es sogar mehrere... und sie müssen als Modul eingebunden werden, was eben Abhängigkeiten erzeugt. Ist bei PHP alles nicht der Fall. Deshalb die Frage.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Die sich wiederrum meist an die DB-API2 halten.droptix hat geschrieben:Bei Python gibt es meistens verschiedene Wrapper für die Datenbanken. Manchmal gibt es sogar mehrere...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hi droptix,droptix hat geschrieben:Wil es auf Python portiert wurde und deshalb eigentlich nicht nativ drauf ausgerichtet ist. Außerdem hat PHP für viele Datenbanken bereits eigene Standard-Befehle, die ADOdb einfach vereinheitlicht.
Bei Python gibt es meistens verschiedene Wrapper für die Datenbanken. Manchmal gibt es sogar mehrere... und sie müssen als Modul eingebunden werden, was eben Abhängigkeiten erzeugt. Ist bei PHP alles nicht der Fall. Deshalb die Frage.
ich glaub, Du musst Dir das mit den Datenbanken nochmals genau anschauen

Python hingegen besitzt den DB-API Specification 2.0 Standard, den die meisten DB API Module unterstützen. Sprich, wenn Du Dich an die DB API 2.0 hälst, bist Du auf der sicheren Seite. Es gibt auch interessante native Python DBs (kein Modul notwendig), die für viele Zwecke locker ausreichen. Man braucht nicht immer gleich einen DB Server, der auch entsprechend konfiguriert und gewartet werden muss.
Ich glaub, Dir geht's eher darum, PHP oder Python ...

Tabellar
Nee, wenn schon dann Python
Nur wenn ich ADOdb einsetzen will, muss es auch stabil sein und alles unterstützen, was es promotet... Kann ja schlecht was entwickeln und sagen: "Wir unterstützen alle gängigen Datenbanken..." und dann ist ADOdb wirklich noch einen Schritt hinter der PHP-Version zurück und meine Angaben sind damit nicht ganz korrekt. Erklär das dann mal einem Kunden
Ich meinte, dass bei PHP bereits alle Funktionen zum Arbeiten mit Datenbanken im PHP-Quellcode enthalten sind. Also einmal PHP installiert und man hat sofort (ohne zusätzliche Module) Befehle für den Zugriff auf verschiedene Datenbanken. Aber Recht hast du: die sind aus der Historie einfach nicht einheitlich. Deswegen ja ADOdb...
Aber OK, wenn sich die Python-Module an den DB-API Specification 2.0 Standard halten, sollte es ja keine Probleme geben. Es ist für mich manchmal ungewöhnlich, dass es z.B. mehrere Wrapper für SQLite gibt... warum? Lieber sollen alle Entwickler an einem Strang ziehen und nur ein Modul bauen. Aber hab schon gesehen, dass bei solchen Fällen in ADOdb dann auch genau drin steht, welches Modul vorausgesetzt wird.


Ich meinte, dass bei PHP bereits alle Funktionen zum Arbeiten mit Datenbanken im PHP-Quellcode enthalten sind. Also einmal PHP installiert und man hat sofort (ohne zusätzliche Module) Befehle für den Zugriff auf verschiedene Datenbanken. Aber Recht hast du: die sind aus der Historie einfach nicht einheitlich. Deswegen ja ADOdb...
Aber OK, wenn sich die Python-Module an den DB-API Specification 2.0 Standard halten, sollte es ja keine Probleme geben. Es ist für mich manchmal ungewöhnlich, dass es z.B. mehrere Wrapper für SQLite gibt... warum? Lieber sollen alle Entwickler an einem Strang ziehen und nur ein Modul bauen. Aber hab schon gesehen, dass bei solchen Fällen in ADOdb dann auch genau drin steht, welches Modul vorausgesetzt wird.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Es gibt nur einen wirklich guten (den 99% aller Leute die sowas brauchen nutzen), PySQLite der dafür sehr gut ist. Das was auf SqliteWrappers steht sind meist ORMs, die von PySQLite abhängen. Dabei laufen alle DB-Operationen über PySQLite.droptix hat geschrieben:Aber OK, wenn sich die Python-Module an den DB-API Specification 2.0 Standard halten, sollte es ja keine Probleme geben. Es ist für mich manchmal ungewöhnlich, dass es z.B. mehrere Wrapper für SQLite gibt... warum?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Aha, dachte ich mir's doch. Wie man hier lesen kann, vereinheitlicht ADOdb auch die Unterschiede bei der SQL-Syntax verschiedener Datenbank-Sprachen. Es macht also doch Sinn, ADOdb einzusetzen, wenn es nur um Standard-Abfragen wie SELECTs, INSERTs oder UPDATEs geht. Hier der vielleicht wichtigste Auszug:
Und sowas hab ich auch für Python gesucht. Meint ihr immernoch, dass das für Python keinen Sinn macht und die DB-Wrapper ausreichen? Falls ja, wieso? Ich persönlich finde ADOdb sehr sinnvoll...
Das ist doch eigentlich sehr wichtig, wenn man eine DB-unabhängige Anwendung programmieren will, oder? Ich hab sowas Ähnliches wie ADOdb mit PHP auch schon für MySQL gemacht... ein SQL-SELECT-statment sieht dann z.B. nur noch so aus:You might ask why Python needs a database abstraction library when Python provides the official DB API. Unfortunately the DB API does not encapsulate differences in the database implementations. For example, to select a limited number of rows, say 10 rows, you would have to use very different SQL for different databases:
MS SQL: select top 10 from table
MySQL and PostgreSQL: select * from table limit 10
Oracle: select * from (select * from table) where rownum <= 10
These differences are handled by ADOdb (using SelectLimit), but not by the Python DB API. Other important database differences transparently handled by ADOdb include date-formating, associative arrays (records as dictionaries) and LOB-handling.
Code: Alles auswählen
// automatisch nur MySQL, könnte aber erweitert werden
$db = new Database();
$db->connect();
$tables_fields = array (
'table1' => array ('primaryKeyField', 'otherField1', 'otherField2 AS aliasField2'),
'table2' => array ('primaryKeyField', 'otherField')
);
$where = "primaryKeyField = 123";
// $limit, $autocloseConnection und weitere Argumente könnten übergeben werden
$result = $db->Select($tables_fields, $where);
$db->close();
print_r ($result);
// würde bringen:
// $result['pk'] = array (123) // alle Primary Keys
// $result['set'][123] = array (...die Werte der Felder...)
// $result['1st'] = array (... die erste Zeile, die ausgelesen wurde ...)
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Dann nimm ADOdb, wenn du damit glücklich wirst. Ich würde es nicht nehmen, weil:droptix hat geschrieben:Meint ihr immernoch, dass das für Python keinen Sinn macht und die DB-Wrapper ausreichen? Falls ja, wieso? Ich persönlich finde ADOdb sehr sinnvoll...
- another Abstraction Layer
- es bügelt die Unterschiede aus, aber nur teilweise, für kompliziertere Sachen muss man ja dann doch DB-spezifisches SQL schreiben.
- die API gefällt mir nicht:
EOF? Wofür gibts in Python Iteratoren?
Code: Alles auswählen
while not cursor.EOF: print cursor.fields cursor.MoveNext()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice