Uso en Python
Importación
Python puede conectarse con SQLite mediante el conector sqlite3, el cual debe importarse:
Conectores y cursores
Se crea un conector que abre el archivo que almacena la base de datos:
# ejemplo: archivo de base de datos aledaño al ejecutable
ruta_archivo = "Northwind.db"
# conexion con base de datos en archivo
conector = sqlite3.connect(ruta_archivo)
El siguiente paso es crear un cursor para manejar pedidos y respuestas de SQLite:
Consultas y transacciones
Para hacer las consultas se usa el método execute()
,
el cual siempre crea una transacción.
Las instrucciones de SQL se ingresan como argumento en formato texto.
Lectura
# inicio de transacción (BEGIN implícito)
cursor.execute(
# Rutina SQL, 1 renglon
'SELECT ProductName, Price FROM Products;'
)
fetchall()
:
#respuesta de la base de datos
resultados = cursor.fetchall()
print(resultados)
Modificar datos
Si se busca leer modificar los datos también se usa el método execute()
.
Recordar que este método implícitamente inicia una transacción
y por tanto los cambios producidos serán temporales:
# inicio de transacción (BEGIN implícito)
cursor.execute(
# Consulta SQL: actualización de un nombre de producto
'''
UPDATE Products SET ProductName = "Chais" WHERE ProductName = "El Pollo" ;
'''
)
Validación y descarte
La validación de los cambios introducidos se realiza con el método commit()
en tanto que el descarte de los mismos se realiza con el método rollback()
:
Una posibilidad del uso de éstos métodos es repartirlos entre las rutinas de excepciones ( try
- except
- else
).
De esta forma se validan los cambios sólo si no se produjeron excepciones
y en caso contrario se ordena el reestablecimiento de los datos originales.
try:
# inicio de transacción (BEGIN implícito)
cursor.execute(
# Consulta SQL: actualización de un nombre de producto
'''
UPDATE Products SET ProductName = "Chais" WHERE ProductName = "El Pollo" ;
'''
)
except:
# excepción producida: reestablecimiento de datos
conector.rollback()
print("datos reestablecidos")
else:
# respuesta normal: guardado definitivo de cambios
conector.commit()
print("cambios confirmados")
Cierre
Cierre manual
El cierre manual de la base de datos se realiza cerrando tanto el cursor como el conector con el método close()
:
Cierre automático
Una alternativa es abrir creando un contexto con la cláusula with
,
de la misma manera en que suelen abrirse los archivos.
En tal caso el cierre de la base de datos se hace automáticaticamente al salir del contexto creado,
el cual es marcado por indentación.
with sqlite3.connect(ruta_archivo) as conector:
# Cursor
cursor = conector.cursor()
# rutina
# .....
# cierre automático
Extra: Pandas y Mathplotlib
Pandas
Una opción para darle formato de tablas a la información en consola es usar la biblioteca pandas. El paquete se instala vía PIP:
El paquete se importa para su uso:
Finalmente el paquete ayuda a dar formato a la data de la consulta
con ayuda de la función DataFrame()
:
Matplotlib
La biblioteca Mathplotlib permite graficar las tablas formateadas con Pandas con la función pyplot()
.
Debe instalarse:
El paquete requiere importación:
Combinando paquetes
Pandas incluye integrado su propio manejador para realizar consultas y gestionar el resultado ya formateado:
# Query para el gestor SQL en formato 'string'
consulta = '''
SELECT ProductName, Price FROM Products;
'''
# Envío consulta y recepción de respuesta
dataframe = pd.read_sql_query(consulta, conector)
Con el método plot()
de Pandas se configuran los parámetros de interés de
la gráfica.
Ésta se muestra con la función show()
de Matplotlib:
# Pandas - parámetros de la gráfica
dataframe.plot(
x="ProductName",
y="Price",
kind="bar",
figsize=(10, 5),
legend = False
)
# Matplotlib - Gráfica de Barras
plt.title("Precios")
plt.xlabel("Producto")
plt.ylabel("Valor")
plt.xticks(rotation = 90) # etiquetas en vertical
plt.show()
Ejemplos
Ejemplo Nº1: consulta de precios - por consola
import sqlite3
# ejemplo: archivo de base de datos aledaño al ejecutable
ruta_archivo = "Northwind.db"
# conexion con base de datos en archivo
conector = sqlite3.connect(ruta_archivo)
# Cursor
cursor = conector.cursor()
# inicio de transacción (BEGIN implícito)
cursor.execute(
# Rutina SQL, 1 renglon
'SELECT ProductName, Price FROM Products;'
)
#respuesta de la base de datos
resultados = cursor.fetchall()
print(resultados)
# cierre de conexión
cursor.close()
conector.close()
import sqlite3
# ejemplo: archivo de base de datos aledaño al ejecutable
ruta_archivo = "Northwind.db"
with sqlite3.connect(ruta_archivo) as conector:
# Cursor
cursor = conector.cursor()
# inicio de transacción (BEGIN implícito)
cursor.execute(
# Rutina SQL, 1 renglon
'SELECT ProductName, Price FROM Products;'
)
#respuesta de la base de datos
resultados = cursor.fetchall()
print(resultados)
Ejemplo Nº2: consulta de precios - con gráficas
import sqlite3
import pandas as pd
import matplotlib.pyplot as plt
ruta_archivo = "Northwind.db"
# conexion con base de datos en archivo
conector = sqlite3.connect(ruta_archivo)
# Query para el gestor SQL en formato 'string'
consulta = '''
SELECT ProductName, Price FROM Products;
'''
# Envío consulta y recepción de respuesta
dataframe = pd.read_sql_query(consulta, conector)
# parámetros de la gráfica
dataframe.plot(
x="ProductName",
y="Price",
kind="bar",
figsize=(10, 5),
legend = False
)
# Gráfica de Barras
plt.title("Precios")
plt.xlabel("Producto")
plt.ylabel("Valor")
plt.xticks(rotation = 90) # etiquetas en vertical
plt.show()
Ejemplo Nº3: Actualización de datos - con excepciones
import sqlite3
# ejemplo: archivo de base de datos aledaño al ejecutable
ruta_archivo = "Northwind.db"
# conexion con base de datos en archivo
with sqlite3.connect(ruta_archivo) as conector:
# Cursor
cursor = conector.cursor()
try:
# inicio de transacción (BEGIN implícito)
cursor.execute(
# Modificación de campo
'''
UPDATE Products SET ProductName = "Chais" WHERE ProductName = "El Pollo" ;
'''
)
except:
# reestablecimiento de datos
conector.rollback()
print("datos reestablecidos")
else:
# guardado definitivo de cambios
conector.commit()
print("cambios confirmados")