En el curso de Python le ha tocado al tema de base de datos. La verdad es que no tengo muy claro que orden seguir con el curso, pero le ha tocado esto 😛
Lo primero que me ha llamado la atención es que Python viene, con la instalación estándar, con la base de datos SQLite embebida. Esto me ha venido estupendo porque en el curso. Me ahorro indicar que hay que instalarse una base de datos u otra para poder seguir los ejemplos. Como Python viene con SQLite, pues simplemente usar esa en los ejemplos y cualquiera puede seguirlos sin necesidad de instalarse nada adicional.
El siguiente punto que me ha llamado la atención es el tema de cómo se implementan los módulos de base de datos. En java existen una serie de clases e interfaces predefinidos, lo que se llama la JDBC (Java Database Connectivity). En Python intentan lo mismo, es la Python Database Specification PEP 249. Pero se queda un poco cojo por las características del lenguaje. En Java, al ser de tipado estático, puede «obligar» a que los driver de conexión de base de datos cumplan más o menos a rajatabla la especificación JDBC. En Python, puesto que es de tipado dinámico, la especificación se queda en una especie de descripción de qué métodos y clases tienen que implementar los módulos de conexión a base de datos, pero no puede «obligar» tanto como lo hace java. Esto hace que sí, que quizás todos los módulos cumplen la especificación, más o menos, pero no tienes tantas garantías de que el código sea reutilizable si cambias de base de datos.
Otro punto que me ha llamado la atención y este sí es a favor de Python, es la facilidad de todo esto. Apenas hay un par de clases en la especificación con unos cuantos métodos de los cuales realmente con tres o cuatro podemos hacer prácticamente todo. La JDBC de Java es bastante más compleja.
Y finalmente otro punto, que no sé qué pensar, es el tema de fechas, horas y timestamps. Java tiene soporte para ello, tienen tipos propios java.sql.Date, java.sql.Time y java.sql.Timestamp, que se usan en JDBC y se convierten correctamente a los tipos Date, Time y Timestamp de las columnas de base de datos. Python, hasta donde he visto, no tiene este soporte. Para manejar fechas y horas, debemos hacer las conversiones a los String en los formatos que los soportan las bases de datos. No es costoso, pero no sé si es cómodo.