Acceso a base de datos SQLite con Python en IOTeca

Acceso a base de datos SQLite con Python

SQLite es un motor de bases de datos pequeño y simple que se usa ampliamente para aplicaciones de escritorio y en sistemas embebidos como los teléfonos móviles.
Está implementado en una biblioteca escrita en C y que ya se encuentra incoporada en el interprete de Python.

En Python existe DB-API, una API estándar que es implmentada por la mayoría de los módulos que permiten trabajar con bases de datos relaciones.
Una API, Apllication Porgramming Interface, es un conjunto de rutinas que proveen acceso a funciones de un software.
Por lo tanto, las instrucciones utilizadas en esta nota serán similares a las utilizadas para conectarse con el resto de los motores.

Para tener acceso a SQLite deberemos en principio importar el módulo sqlite3.
Luego definiremos los datos para la conexión y estableceremos un cursor.
A través del método execute() del cursor realizaremos las consultas a nuestra base de datos.

En nuestro primer ejemplo crearemos la base insumos.sqlite, dentro de la cual crearemos la tabla productos con tres campos:

import sqlite3
#crea conexión con motor sqlite
conn = sqlite3.connect("insumos.sqlite")
#establece cursor
cursor = conn.cursor()

# Ejecutar una consulta
sql_create="""CREATE TABLE productos (
producto VARCHAR(60),
precio FLOAT
)"""
cursor.execute(sql_create)

# Guardar los cambios
conn.commit()
conn.close()

Notar que para confirmar los cambios hemos utilizado el método commit() de la conexión.
Utilizaremos commit siempre que realicemos una modificación: CREATE, INSERT, UPDATE, DELETE
Por último cerramos la conexión con el método close().

Para poder visualizar y trabajar con una base realizada en Sqlite podemos utilizar DB Browser sqlitebrowser.org.
La base creada se verá así:


A continuación vamos a ingresar registros en nuestra tabla. En este ejemplo utilizaremos una tupla con los datos.

Luego realizaremos un bucle con los INSERT correspondientes. La conexión y cursor se utilizan como en el ejemplo anterior, de igual forma para los ejemplos siguientes.

	
#Ingreso de datos
productos = (
("Teclado", 1300),
("Mouse", 560),
("Pendrive 16 MB", 800)
)

for producto, precio in productos:
	cursor.execute("INSERT INTO productos VALUES (null, ?, ?)", (producto, precio))
conn.commit()

Para evitar Inyección de SQL, en las consultas nunca se debe utilizar ninguno de los métodos que provee Python para incluir variables dentro de una cadena, como placeholders, a menos que previamente realicemos las verificaciones pertinentes.
En su lugar, se coloca un signo de interrogación (?) por cada valor que se quiera reemplazar, y luego se pasan los valores dentro de una tupla como segundo argumento.
Trataremos la Inyección de código SQL en otra nota.

La tabla con datos se verá así:


El método fetchall() retorna la información devuelta por la consulta en una lista que contiene tuplas, y cada una de estas corresponde a una fila de la tabla.

cursor.execute("SELECT * FROM productos")
productos = cursor.fetchall()

for id_prod, producto, precio in productos:
	print(f"{id_prod} - {producto} t${precio}")

El método fetchone() retorna la información devuelta en una tupla que corresponde a un sólo registro de la tabla.

cursor.execute("SELECT count(*) FROM productos where precio < 1000")
cantidad = cursor.fetchone()
print(f"Productos económicos: {cantidad[0]}")

Si por algún motivo una consulta no puede ejecutarse, se lanzará la excepción sqlite3.OperationalError la cual puede ser capturada mediante una estructura try-except, como la siguiente:

#consulta con sintaxis mal
try:
	cursor.execute("SELECT  FROM personas")
except sqlite3.OperationalError:
	print("La consulta no se ejecutó correctamente.")

Más información sobre SQLite en sqlite.org

Creado: 27/07/2020  

Publicidad

| Volver a Python |

Comentarios

Para poder comentar debés registrarte e ingresar al sitio.