Para empezar, necesitamos instalar el conector apropiado (también conocido como driver ) para el sistema de base de datos que estamos usando. Esta utilidad viene en forma de un módulo que está a disposición bien de la biblioteca estándar (como sqlite3 ) o bien de un paquete de terceros como mysql-connector-python y psycopg2-binary para Mysql / MariaDB y PostgreSQL, respectivamente. En cualquier caso, el Índice de Paquetes Python es nuestro lugar de referencia para buscar los adaptadores disponibles.
En esta guía, usaremos PostgreSQL, ya que proporciona una función llamada ROW_TO_JSON out of the box. Como su nombre lo sugiere, esta función devuelve cada fila del conjunto de resultados como un objeto JSON. Como ya hemos aprendido a trabajar con datos JSON, seremos capaces de manipular el resultado de una consulta muy fácilmente.
Dicho esto, necesitaremos instalar psycopg2-binario , preferiblemente dentro de un entorno virtual antes de proceder:
1 pip instalar psycopg2-binario
bash
Ahora vamos a examinar la base de datos PostgreSQL con la que trabajaremos, que se llama nba . Las Figs. 1 a 3 muestran la estructura de las tablas de entrenadores , de jugadores , y de equipos .
- Coaches almacena los siguientes datos, donde Coach_id actúa como la clave principal. Además del nombre y apellido del entrenador, también hay un team_id que es una clave foránea que hace referencia al campo homónimo en la tabla de equipos.
- Los jugadores, además del player_id (clave primaria) y el team_id (clave extranjera, que indica el equipo en el que juega actualmente), también tienen el nombre y apellidos, el número de la camiseta, la altura en metros, el peso en kilogramos y el país de origen.
- Finalmente, los equipos se describen por su nombre, conferencia, rango actual de la conferencia, victorias y derrotas en casa, y victorias y derrotas fuera de casa. Por supuesto, también tiene la clave primaria de team_id que se hace referencia en las otras dos tablas.
El siguiente paso consiste en escribir una consulta SQL para recuperar la lista de equipos ordenados por conferencia y rango, junto con el número de jugadores de cada equipo y el nombre de su entrenador. Y mientras estamos en ello, también podemos añadir el número de victorias en casa y fuera:
1234567891011121314SELECT t.name, t.city, t.conference, t.conference_rank,COUNT(p.player_id)AS número_de_jugadores, CONCAT(c.first_name,$0027 $0027, c.last_name)AS entrenador, t.home_wins, t.away_wins FROM players p, teams t, coaches c WHERE p. ID_Equipo = ID_Equipo Y ID_Equipo = ID_Equipo GRUPO t.nombre, nombre, apellido, ciudad, conferencia, rango de conferencia, victorias en casa, victorias fuera de casa ORDEN DE CONFERENCIA t.conferencia, rango de conferencia
sql
Luego envolveremos la consulta dentro de la función ROW_TO_JSON para nuestra conveniencia y la guardaremos en un archivo llamado query.sql en el directorio actual:
12345678910111213141516SELECT ROW_TO_JSON(team_info)FROM(SELECT t.name, t.city, t.conference, t.conference_rank,COUNT(p.player_id)AS número_de_jugadores, CONCAT(c.first_name,$0027 $0027, c.last_name)AS entrenador, t.home_wins, t. p.equipo_id = t.equipo_id Y c.equipo_id = t.equipo_id GRUPO t.nombre, c.nombre, c.apellido, t.ciudad, t.conferencia, t.rango_conferencia, t.victorias en casa, t.victorias fuera de casa ORDENACIÓN t.conferencia, t.rango_conferencia )AS información_de_equipo
sql
La figura 4 muestra los primeros registros de la consulta anterior. Nótese que cada fila tiene la estructura de un diccionario Python donde los nombres de los campos devueltos por la consulta son las claves.
Por último, pero no menos importante, una palabra de advertencia. Para conectarse a una base de datos, necesitamos un nombre de usuario y una contraseña. Es la mejor práctica utilizar variables de entorno en lugar de exponerlas a la vista como parte de la cadena de conexión. Esto es particularmente importante si empujas tu código a un sistema de control de versiones al que otras personas pueden acceder. En entornos de tipo Unix, esto se puede hacer añadiendo las siguientes dos líneas al final del archivo de inicialización de su shell. Para aplicar los cambios, tendrás que cerrar la sesión y volver a iniciar sesión o crear el archivo en la sesión actual.
12exportDB_USER="su_nombre_de_usuario_PostgreSQL_aquí_dentro_de_las_comillas "exportDB_PASS="su_contraseña_dentro_de_las_comillas"
bash
En Windows, vaya a Panel de control / Sistema / Configuración avanzada del sistema . Selecciona la pestaña Advanced y haz clic en Environment Variables para añadirlas:
Estamos listos para empezar a escribir el código Python!