Was ist das Python-Äquivalent von Perls DBI?

8

Was ist Pythons Pendant zu Perls DBI und wie benutze ich es? Genauer gesagt, was ist das Python-Äquivalent des folgenden Perl-Codes?

%Vor%     
knorv 27.06.2010, 21:28
quelle

2 Antworten

8
%Vor%

Die Python-Datenbank-API verwendet eine gemeinsame Konvention , die in verschiedenen Datenbanken ziemlich identisch ist ( aber nicht ganz!). Sie können die MySQLdb-Dokumentation hier lesen.

Es gibt auch eine funktionsreichere Schnittstelle zu mysql, die oursql genannt wird. Es hat echte Parametrisierung (nicht nur glorifizierte String-Interpolation), serverseitige Cursor, Daten-Streaming und so weiter.

    
shylent 27.06.2010, 21:48
quelle
16

Shylents Post erfüllt die Anforderung des OP nach gleichwertigem Code. Allerdings wird das Problem, was Python dem Perl-DBI entspricht, nicht angemessen behandelt.

Für diejenigen, die nicht mit Perls DBI vertraut sind, bietet es eine gemeinsame Schnittstelle für alle Datenbanksysteme. Um Unterstützung für das neue Speicher-Backend hinzuzufügen, muss ein Datenbanktreiber oder eine DBD geschrieben werden . Treiber gibt es für viele verschiedene Datenbanksysteme und sogar Ziele außerhalb der Datenbank wie CSV-Dateien und Tabellenkalkulationen.

Es sieht so aus, als ob die Python DB-API dem Perl DBI am nächsten kommt. Es ist jedoch eine Spezifikation und keine Implementierung. Inwieweit entspricht ein Datenbanktreiber der Spezifikation bis hin zum Autor?

Natürlich unterscheiden sich Datenbanksysteme darin, welche SQL-Befehle und -Syntax sie unterstützen. Datenbanken unterscheiden sich ziemlich stark darin, welche Funktionen sie bereitstellen. Jedes System, das versucht, die Datenbankinteraktion zu standardisieren, wird Probleme mit der Portabilität haben, da alle diese unterschiedlichen Systeme unterschiedliche Feature-Sets bieten.

Meine Erfahrung mit Perl DBI war sehr positiv. Es ist ziemlich einfach, portablen Code zu schreiben, der mit vielen DBD-Treibern funktioniert. Ich habe erfolgreich 4 verschiedene Datenbanktreiber (Postgres, MySQL, ein CSV-Dateitreiber und SQLite) in einer einzigen Anwendung verwendet, indem ich einfach die Datenbankverbindungszeichenfolge änderte. Für komplexere Anwendungen, die auf "inkompatible" Funktionen der Datenbank zugreifen müssen, gibt es eine Reihe von Abstraktionsbibliotheken die die DBI-Schnittstelle erweitern und die Portabilität weiter vereinfachen.

Ich habe nicht genug Python-Erfahrung, um sagen zu können, wie PEP249 in der realen Welt abläuft. Meine Hoffnung ist, dass Datenbank-Treiber-Entwickler nah an der Spezifikation, und Portabilität ist leicht zu erreichen. Vielleicht wird jemand mit einem tieferen Python-Wissen in der Lage sein, dieses Thema zu erweitern. Es gibt einige Informationen zum Python-Datenbankzugriff im Python-Wiki .

    
daotoad 28.06.2010 03:36
quelle

Tags und Links