Pandas read_sql_query en Python

Manav Narula 21 junio 2023
Pandas read_sql_query en Python

SQL es un lenguaje de programación utilizado para crear y mantener bases de datos en un sistema de gestión de bases de datos relacionales. Podemos crear muchas aplicaciones de bases de datos usando Python.

Se pueden usar varias bibliotecas como SQLite, SQLAlchemy y más para crear conexiones a aplicaciones SQL instaladas en el dispositivo.

En Python, podemos almacenar tablas como objetos DataFrame usando la biblioteca pandas. También podemos trabajar con consultas SQL con esta biblioteca.

Este tutorial demostrará cómo leer los resultados de una consulta SQL utilizando la función pandas.read_sql_query().

Python Pandas read_sql_query

Usando la función pandas.read_sql_query(), podemos leer directamente el resultado de una consulta en un DataFrame. Necesitamos crear una conexión a una base de datos SQL para usar esta función.

En nuestro ejemplo, usaremos la biblioteca sqlite3. Podemos usar esta biblioteca para trabajar con la aplicación de base de datos SQLite.

El método connect() se usa para crear una conexión, y el nombre de la base de datos se proporciona en esta función. Crearemos la conexión y ejecutaremos la instrucción SELECT para cargar datos en el DataFrame.

Vea el código a continuación.

import pandas as pd
import sqlite3

connection = sqlite3.connect("delftstack.db")
crsr = connection.cursor()
ct_sql = """CREATE TABLE data3 (
number INTEGER,
name VARCHAR(20));"""
crsr.execute(ct_sql)
crsr.execute("""INSERT INTO data3 VALUES (1, "GEORGE");""")
crsr.execute("""INSERT INTO data3 VALUES (2, "KEVIN");""")
df = pd.read_sql_query("""SELECT number,name FROM data3""", con=connection)
print(df)
connection.close()

Producción :

   number    name
0       1  GEORGE
1       2   KEVIN

En el ejemplo anterior, leemos datos de la tabla data1 en la base de datos delftstack.db. El resultado de la consulta se almacena en el DataFrame df.

Podemos usar algunos parámetros convenientes también con esta función. El parámetro index_col se usa para especificar el índice del DataFrame, y los nombres de las columnas se pueden proporcionar con el parámetro columns.

El parámetro coerce_float puede convertir valores no numéricos ni de cadena en números de coma flotante.

El parámetro más útil aquí es el parámetro chunksize. Es posible que nos encontremos con tablas y conjuntos de datos enormes en SQL.

Entonces, si los leemos a la vez en un DataFrame, entonces se consume mucha memoria internamente. Esto se puede evitar con el parámetro chunksize que crea fragmentos de datos de las filas especificadas.

Crea objetos iteradores de dichos fragmentos que se pueden iterar y usar para trabajar con los datos.

El pandas.read_sql es otra función disponible en la biblioteca pandas que puede leer el resultado de una consulta SQL a un DataFrame. Sin embargo, esto es solo un envoltorio alrededor de las funciones read_sql_query y read_sql_table para compatibilidad con versiones anteriores.

Cada vez que la función pandas.read_sql() encuentra una consulta SQL, se enruta a la función read_sql_query discutida en este tutorial.

Una alternativa a esta función es usar la función fetchall(). Esta función recupera todas las filas del resultado de una consulta SQL.

Ejecutaremos la declaración SELECT para imprimir las filas y usaremos esta función para recuperarlas y almacenarlas en un DataFrame usando el constructor pandas.DataFrame.

Vea el siguiente ejemplo.

import pandas as pd
import sqlite3

connection = sqlite3.connect("delftstack.db")
crsr = connection.cursor()
ct_sql = """CREATE TABLE data4 (
number INTEGER,
name VARCHAR(20));"""
crsr.execute(ct_sql)
crsr.execute("""INSERT INTO data4 VALUES (1, "GEORGE");""")
crsr.execute("""INSERT INTO data4 VALUES (2, "KEVIN");""")
crsr.execute("""SELECT number,name FROM data4""")
df_new = pd.DataFrame(crsr.fetchall(), columns=["number", "name"])
print(df_new)
connection.close()

Producción :

   number    name
0       1  GEORGE
1       2   KEVIN
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Artículo relacionado - Pandas SQL