Importando datos en Python (III)

En este post abordamos la importación de bases de datos relacionales en Python, dando continuación a los anteriores: lectura de ficheros planos y otras extensiones.

 

Bases de datos relacionales

Una base de datos relacional es un conjunto de una o más tablas estructuradas en registros (filas) y campos (columnas), vinculadas entre sí por un campo común, llamado clave. A esta manera de construir bases de datos se le denomina modelo relacional.

La estructura de las tablas es análoga al concepto data frame. Es esencial que cada registro contenga un identificador único, que se usará como clave primaria para acceder explícitamente a dicho registro.

El término query o consulta define la acción de obtener datos de la BD.

Encontramos varios sistemas de gestión de BBDD relacionales, como PostgreSQL, MySQL o SQLite. Todos ellos hacen uso de SQL, un lenguaje de consulta estructurada.

 

Consultando bases de datos relacionales en Python

1. Crear un motor de base de datos.

Para nuestro ejemplo usaremos la base de datos de muestra ‘Chinook’, disponible en SQLite. La descargamos, descomprimimos y copiamos el archivo ‘Chinook_Sqlite.sqlite’ en el directorio donde tengamos instalado Python (en este caso …\Python\Python35-32\).

• Necesitamos instalar la librería sqlalchemy. Siguiendo las instrucciones del apartado 3 del post introductorio a Python:

phyton

• Importamos la función create_engine() de la librería sqlalchemy. Hacemos la llamada a dicha función pasando como argumento la cadena de conexión (tipoBD:///nombreBD.tipoBD) y lo almacenamos en una variable.
phyton

• Podemos explorar las tablas que contiene la BD, aplicando el método .table_names() a nuestro motor.

phyton

 

2. Realizar consulta.

El proceso a seguir es el siguiente:

• Abrir una conexión al motor de base de datos > .connect()

• Ejecutar la query > .execute()

• Guardar el resultado de la query en un data frame > pd.DataFrame()

.fetchall(): devuelve todos los registros

.fetchmany(size= ): devuelve #registros especificado en size

• Asignar nombres a las columnas del data frame > .keys()

• Cerrar la conexión al motor > .close()

 

O bien, usando el gestor de contexto, nos ahorramos cerrar explícitamente la conexión, pero igualmente hay que transformar el resultado de la query en un data frame y asignar nombres a las columnas.

 

La librería pandas nos permite ejecutar una query en una sola línea, sin necesidad de conectar con el motor y cerrar la conexión de manera explícita.

Esto se consigue con la función read_sql_query(), que recoge como primer argumento una cadena con el texto de la consulta, y como segundo argumento el motor con el que queremos conectar.

El resultado de la consulta será un data frame, que almacenamos en una variable.

phyton

 

Practica con pandas y prueba a encontrar tu grupo!

Autor:

Cooking data at Metriplica.

2 Comments

  1. Roberto Matarrita

    Cuando ejecuto este proceso me da el siguiente error.
    Lo estoy corriendo en postgresql

    Traceback (most recent call last):
    File “importpandas”, line 5, in
    df=pd.read_sql_query(‘Select * from usuarios’)
    TypeError: read_sql_query() missing 1 required positional argument: ‘con’

    Roberto Matarrita
    rmatarria@gmail.com
    Costa Rica

  2. Lourdes Hernández

    Hola Roberto,

    Te está pidiendo que pases el segundo argumento a la función (el motor de base de datos con el que queremos conectar).

    Gracias por seguirnos!

Leave Comment

Your email address will not be published. Required fields are marked *