Shylents Post erfüllt die Anforderung des OP nach gleichwertigem Code. Das Problem, was Python dem Perl-DBI entspricht, wird jedoch nicht angemessen behandelt.
Für diejenigen, die nicht mit Perl's DBI vertraut sind, bietet es eine gemeinsame Schnittstelle für alle Datenbanksysteme. Hinzufügen von Unterstützung für neues Speicher-Back-End, a database driver or DBD needs to be written. Drivers exist for many different database systems und sogar Nicht-Datenbankziele 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 Portabilitätsprobleme haben, da alle diese unterschiedlichen Systeme unterschiedliche Merkmalssätze bereitstellen.
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 mehr "inkompatible" Features der Datenbank zugreifen müssen, gibt es eine Reihe von abstraction libraries, die die DBI-Schnittstelle erweitern und die Portabilität weiter vereinfachen.
Ich habe nicht genug Python Erfahrung in der Lage zu sagen, wie PEP249 spielt in der realen Welt. 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 information on Python database access at the Python wiki.
@JanhUdec Ich sehe hier im Code keine Art von String-Interpolation in Abfragen. Um Klarheit zu bitten? – shylent
Entschuldigung, Sie haben Recht. –
Sollte MySQLdb.cursors.DictCursor sein, aber immer noch ein +1 für ein gutes Beispiel. –