Base de Datos SQLite con Python: sqlite3 Completo
SQLite es una base de datos embebida que no requiere servidor. Python incluye el módulo sqlite3 de forma nativa, ideal para aplicaciones de escritorio, scripts y prototipado.
Conexión y Creación de Tablas
import sqlite3
# Conexión (crea el archivo si no existe)
con = sqlite3.connect("base_datos.db")
con.row_factory = sqlite3.Row # Acceso a columnas por nombre
cur = con.cursor()
# Crear tabla
cur.execute("""
CREATE TABLE IF NOT EXISTS productos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nombre TEXT NOT NULL,
precio REAL NOT NULL,
stock INTEGER DEFAULT 0,
creado TEXT DEFAULT (datetime('now'))
)
""")
con.commit()
print("Tabla creada")
con.close()
CRUD con Context Manager
import sqlite3
def conectar():
con = sqlite3.connect("base_datos.db")
con.row_factory = sqlite3.Row
return con
# INSERT
def agregar_producto(nombre, precio, stock=0):
with conectar() as con:
cur = con.execute(
"INSERT INTO productos (nombre, precio, stock) VALUES (?,?,?)",
(nombre, precio, stock)
)
print(f"Insertado id={cur.lastrowid}: {nombre}")
return cur.lastrowid
# SELECT
def listar_productos(limite=10):
with conectar() as con:
filas = con.execute(
"SELECT * FROM productos ORDER BY id DESC LIMIT ?", (limite,)
).fetchall()
for f in filas:
print(f" [{f['id']}] {f['nombre']} | ${f['precio']:.2f} | stock={f['stock']}")
return filas
# UPDATE
def actualizar_precio(id_producto, nuevo_precio):
with conectar() as con:
con.execute("UPDATE productos SET precio=? WHERE id=?", (nuevo_precio, id_producto))
print(f"Precio actualizado: id={id_producto} -> ${nuevo_precio:.2f}")
# DELETE
def eliminar_producto(id_producto):
with conectar() as con:
con.execute("DELETE FROM productos WHERE id=?", (id_producto,))
print(f"Eliminado: id={id_producto}")
agregar_producto("Widget A", 9.99, 150)
agregar_producto("Widget B", 24.99, 80)
agregar_producto("Widget C", 4.99, 320)
listar_productos()
actualizar_precio(1, 11.99)
eliminar_producto(3)
Inserción Masiva con executemany
import sqlite3
productos = [
("Teclado Mecánico", 89.99, 45),
("Ratón Gaming", 39.99, 120),
("Monitor 27\"", 299.99, 18),
("Auriculares USB", 49.99, 75),
("Webcam HD", 59.99, 60),
]
with sqlite3.connect("base_datos.db") as con:
con.executemany(
"INSERT INTO productos (nombre, precio, stock) VALUES (?,?,?)",
productos
)
print(f"Insertados {len(productos)} productos")
Consultas Avanzadas y Filtros
import sqlite3
def buscar_productos(precio_max=None, stock_min=None, texto=None):
condiciones = []
params = []
if precio_max is not None:
condiciones.append("precio <= ?")
params.append(precio_max)
if stock_min is not None:
condiciones.append("stock >= ?")
params.append(stock_min)
if texto:
condiciones.append("nombre LIKE ?")
params.append(f"%{texto}%")
where = ("WHERE " + " AND ".join(condiciones)) if condiciones else ""
sql = f"SELECT * FROM productos {where} ORDER BY precio ASC"
with sqlite3.connect("base_datos.db") as con:
con.row_factory = sqlite3.Row
filas = con.execute(sql, params).fetchall()
print(f"Resultados: {len(filas)}")
for f in filas:
print(f" {f['nombre']} ${f['precio']:.2f} (stock={f['stock']})")
return filas
buscar_productos(precio_max=100, stock_min=50)
buscar_productos(texto="widget")
Exportar SQLite a CSV y JSON
import sqlite3, csv, json
def sqlite_a_csv(db_path, tabla, salida_csv):
with sqlite3.connect(db_path) as con:
con.row_factory = sqlite3.Row
filas = con.execute(f"SELECT * FROM {tabla}").fetchall()
if not filas: return
with open(salida_csv, "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=filas[0].keys())
writer.writeheader()
writer.writerows([dict(f) for f in filas])
print(f"CSV exportado: {salida_csv} ({len(filas)} filas)")
def sqlite_a_json(db_path, tabla, salida_json):
with sqlite3.connect(db_path) as con:
con.row_factory = sqlite3.Row
filas = con.execute(f"SELECT * FROM {tabla}").fetchall()
with open(salida_json, "w", encoding="utf-8") as f:
json.dump([dict(f) for f in filas], f, indent=2, ensure_ascii=False)
print(f"JSON exportado: {salida_json} ({len(filas)} registros)")
sqlite_a_csv("base_datos.db", "productos", "productos.csv")
sqlite_a_json("base_datos.db", "productos", "productos.json")
Importar CSV a SQLite
import sqlite3, csv
def csv_a_sqlite(csv_path, db_path, tabla):
with open(csv_path, encoding="utf-8") as f:
reader = csv.DictReader(f)
filas = list(reader)
if not filas: return
columnas = list(filas[0].keys())
placeholders = ",".join(["?"] * len(columnas))
sql_tabla = f"CREATE TABLE IF NOT EXISTS {tabla} ({', '.join(columnas)})"
sql_ins = f"INSERT INTO {tabla} ({','.join(columnas)}) VALUES ({placeholders})"
with sqlite3.connect(db_path) as con:
con.execute(sql_tabla)
con.executemany(sql_ins, [list(f.values()) for f in filas])
print(f"Importados {len(filas)} registros de {csv_path} -> {db_path}:{tabla}")
csv_a_sqlite("nuevos_productos.csv", "base_datos.db", "nuevos_productos")
Recurso Adicional
Para convertir archivos de base de datos entre SQLite, CSV y JSON sin instalar nada, usa KaijuConverter — gratis y sin registro.
Conversiones relacionadas
Conversiones frecuentes del catálogo: