Bases de datos con SQLite en Python 3

0. ¿Qué es SQLite?

Es un sistema de gestión de bases de datos relacional.

A diferencia de los sistema de gestión de bases de datos cliente-servidor, el motor de SQLite no es un proceso independiente con el que el programa principal se comunica. En lugar de eso, se enlaza con el programa pasando a ser parte integral del mismo.

Programa para administrar visualmente SQLite: enlace

1. Conexión, puntero y consultas básicas

import sqlite3

# Conectar con la base de datos, si no existe la crea automáticamente

conexion = sqlite3.connect(“ejemplo.db”)

# Para poder ejecutar código SQL, tenemos que crear un cursor primero

cursor = conexion.cursor()

cursor.execute(“CREATE TABLE usuarios (nombre VARCHAR(100), edad INTEGER, email VARCHAR(100))”)

# Guardamos los cambios haciendo un commit
conexion.commit()

# Cerrar la conexión siempre

conexion.close()

Insertar un nuevo registro en la tabla:

cursor.execute(“INSERT INTO usuarios VALUES (‘Charlie’, 25, ‘charlie@ejemplo.com’)”)

conexion.commit()

Recuperar el primer registro:

# Recuperamos los registros de la tabla de usuarios
cursor.execute(“SELECT * FROM usuarios”)

# Recorremos el primer registro con el método fetchone, devuelve una tupla
usuario = cursor.fetchone()

Insertar varios registros:

# Creamos una lista con varios usuarios
usuarios = [(‘Maria’, 23, ‘maria@ejemplo.com’),
(‘Mercedes’, 38, ‘mercedes@ejemplo.com’),
(‘Juanita’, 19, ‘juanita@ejemplo.com’),
]

# Ahora utilizamos el método executemany() para insertar varios
cursor.executemany(“INSERT INTO usuarios VALUES (?,?,?)”, usuarios)

# Guardamos los cambios haciendo un commit
conexion.commit()

Recuperar varios registros:

# Recuperamos los registros de la tabla de usuarios
cursor.execute(“SELECT * FROM usuarios”)

# Recorremos todos los registros con fetchall, y los volvamos en una lista de usuarios
usuarios = cursor.fetchall()

# Ahora podemos recorrer todos los usuarios

for usuario in usuarios:

print(“Nombre: ” usuario[0], ” – Email:”,usuario[2])

conexion.commit()

2. Claves primarias, campos autoincrementales y claves únicas

Claves primarias: 

import sqlite3

conexion = sqlite3.connect(“usuarios.db”)

cursor = conexion.cursor()

 

cursor.execute(”’

CREATE TABLE usuarios (

dni VARCHAR(9) PRIMARY KEY,

nombre VARCHAR(100),

edad INTEGER,

email VARCHAR(100)

)

”’)

usuarios = [

(‘11111111A’,’Charlie’,25,’charlie@ejemplo.com’),

(‘22222222B’,’Maria’,23,’maria@ejemplo.com’),

(‘33333333C’,’Mercedes’,38,’mercedes@ejemplo.com’),

(‘44444444D’,’Juanita’,19,’juanita@ejemplo.com’),

]

cursor.executemany(“INSERT INTO usuarios VALUES (?,?,?,?)“, usuarios)

conexion.commit()

conexion.close()

Campos autoincrementales:

No siempre contaremos con claves primarias en nuestras tablas (como el DNI), sin embargo siempre necesitaremos uno para identificar cada registro y poder consultarlo, modificarlo o borrarlo.

Para estas situaciones lo más útil es utilizar campos autoincrementales, campos especiales que asignan automáticamente un número (de uno en uno) al crear un nuevo registro. Es muy útil para identificar de forma única cada registro ya que nunca se repiten.

En SQLite, si indicamos que un campo numérico entero es una clave primaria, automáticamente se tomará como un campo auto incremental. Podemos hacerlo fácilmente así:

import sqlite3

conexion = sqlite3.connect(‘productos.db‘)

cursor = conexion.cursor()

# Las cláusulas not null indican que no puede ser campos vacíos

cursor.execute(”’

CREATE TABLE productos (

id INTEGER PRIMARY KEY AUTOINCREMENT,

nombre VARCHAR(100) NOT NULL,

marca VARCHAR(50) NOT NULL,

precio FLOAT NOT NULL

)

”’)

conexion.commit()

conexion.close()

Insertar registros con campos autoincrementales:

productos = [

(‘Teclado’, ‘Logitech’, 19,95),

(‘Pantalla 19’, ‘LG’, 89.95),

(‘Altavoces 2.1’, ‘LG’, 24.95)

]

# Le indicamos el primer valor como null como id autoincremental

cursor.executemany(“INSERT INTO productos VALUES (null,?,?,?)”, productos)

Consultar los productos con su identificador único:

cursor.execute(“SELECT * FROM productos”)

productos = cursor.fetchall()

for producto in productos:

print(producto)

Claves únicas:

conexion = sqlite3.connect(“usuarios_autoincremental.db”)

cursor = conexion.cursor()

cursor.execute(”’

CREATE TABLE usuarios (

id INTEGER PRIMARY KEY AUTOINCREMENT,

dni VARCHAR(9) UNIQUE,

nombre VARCHAR(100),

edad INTEGER,

email VARCHAR(100)

)

”’)

usuarios = [

(‘11111111A’,’Charlie’,25,’charlie@ejemplo.com’),

(‘22222222B’,’Maria’,23,’maria@ejemplo.com’),

(‘33333333C’,’Mercedes’,38,’mercedes@ejemplo.com’),

(‘44444444D’,’Juanita’,19,’juanita@ejemplo.com’),

]

cursor.executemany(“INSERT INTO usuarios VALUES (null,?,?,?,?)”, usuarios)

conexion.commit()

conexion.close()

 

Nota: Es muy importante contar siempre con identificadores únicos para cada registro, ya que sin ellos nos sería prácticamente imposible editar y borrar campos de forma fácil.

3. Consultas, modificación y borrado de registros

import sqlite3

conexion = sqlite3.connect(“usuarios_autoincremental.db”)

cursor = conexion.cursor()

cursor.execute(“SELECT * FROM usuarios WHERE id=1″)

usuario = cursor.fetchone()

print(usuario)

conexion.commit()

conexion.close()

Modificar un registro: ( Si no usamos la clausula WHERE , actualizará todos los registros )

cursor.execute(“UPDATE usuarios SET nombre =’Charlie Sanchez’, edad=26 WHERE dni=’11111111A'”)

conexion.commit()

Eliminar un registro: ( Si no usamos la clausula WHERE , eliminará todos los registros )

cursor.execute(“DELETE FROM usuarios  WHERE dni=’11111111A'”)

conexion.commit()

Aquí unos ejercicios resueltos :

Autor entrada: CharlieJ

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *