La publicación de Shylent cumple con la solicitud del OP para obtener un código equivalente. Sin embargo, no aborda adecuadamente el problema de cuál es el equivalente de Python al DBI de Perl.
Para quienes no estén familiarizados con Perl's DBI, proporciona una interfaz común para todos los sistemas de bases de datos. Para agregar soporte para el nuevo back-end de almacenamiento, a database driver or DBD needs to be written. Drivers exist for many different database systems, e incluso objetivos que no son de base de datos, como archivos CSV y hojas de cálculo.
Parece que el Python DB-API es lo más parecido a Perl DBI. Sin embargo, es una especificación, y no una implementación. Hasta qué punto cualquier controlador de base de datos cumple con la especificación hasta el autor.
Por supuesto, los sistemas de bases de datos varían en qué comandos SQL y la sintaxis soportan. Las bases de datos varían bastante en las características que proporcionan. Cualquier sistema que intente estandarizar la interacción de la base de datos tendrá problemas de portabilidad para abordar ya que todos estos sistemas diferentes proporcionan conjuntos de características distintas.
Mi experiencia con Perl DBI ha sido muy positiva. Es bastante fácil escribir código portátil que funcione con muchos controladores DBD. He utilizado con éxito 4 diferentes controladores de base de datos (Postgres, MySQL, un controlador de archivo CSV y SQLite) en una sola aplicación simplemente cambiando la cadena de conexión de la base de datos. Para aplicaciones más complejas que necesitan acceder a más características "incompatibles" de la base de datos, hay una serie de abstraction libraries que extienden la interfaz DBI y simplifican aún más la portabilidad.
No tengo suficiente experiencia en Python para poder decir cómo PEP249 se juega en el mundo real. Mi esperanza es que los desarrolladores de controladores de bases de datos estén cerca de las especificaciones, y la portabilidad es fácil de obtener. Quizás alguien con un conocimiento más profundo de Python podrá ampliar este tema. Hay algunos information on Python database access at the Python wiki.
@JanHudec No veo ningún tipo de interpolación de cadena en las consultas aquí, en el código. Cuidado para aclarar? – shylent
Lo sentimos, tienes razón. –
Debe ser MySQLdb.cursors.DictCursor, pero sigue siendo un +1 para un buen ejemplo. –