# Curselia. Guarda como aula_sql.py junto a datos-sql-fixture.txt.
# Ejecuta con Python 3.11 o posterior: python aula_sql.py
# La base es nueva, temporal y vive en memoria. Se reinicia al cerrar.
import sqlite3
from pathlib import Path

conexion = sqlite3.connect(":memory:")
fixture = Path(__file__).resolve().parent / "datos-sql-fixture.txt"
conexion.executescript(fixture.read_text(encoding="utf-8"))
# Impide escrituras posteriores a la preparacion de este conjunto ficticio.
conexion.execute("PRAGMA query_only = ON")
print("Aula SQL preparada. Escribe una consulta SELECT en una linea; salir termina.")
while True:
    consulta = input("SQL> ").strip()
    if consulta.lower() == "salir":
        break
    if not consulta:
        continue
    if not consulta.lower().startswith("select "):
        print("En esta practica solo se admiten consultas SELECT.")
        continue
    try:
        cursor = conexion.execute(consulta)
        print(" | ".join(c[0] for c in cursor.description))
        for fila in cursor:
            print(" | ".join(str(v) if v is not None else "NULL" for v in fila))
    except sqlite3.Error as error:
        print("Revisa la consulta:", error)
conexion.close()
