Renombrar
Cambiá el nombre del Pokémon `viejo` a `nuevo`.
Entrá y llevá tu progreso —ejercicios, medallas y Pokémon— a cualquier dispositivo. 🔄
Si tu cuenta ya tiene progreso guardado, se carga ese al entrar.
Entraste como . Tu progreso se sincroniza solo. 🔄
Cambiá el nombre del Pokémon `viejo` a `nuevo`.
🎯 Meta: cambiar datos que ya existen (UPDATE) y eliminarlos (DELETE). Y la regla de oro: ¡nunca sin WHERE!
Los datos cambian: un Pokémon sube de nivel, otro hay que sacarlo. Para eso están UPDATE y DELETE.
import sqlite3
con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE pokemon (nombre TEXT, nivel INTEGER)")
con.executemany("INSERT INTO pokemon VALUES (?, ?)", [("Pikachu", 25), ("Charizard", 90)])
# Pikachu evolucionó: sube a nivel 50
con.execute("UPDATE pokemon SET nivel = ? WHERE nombre = ?", (50, "Pikachu"))
print(con.execute("SELECT * FROM pokemon").fetchall())
⚠️ El WHERE es clave. Un UPDATE sin WHERE cambia TODAS las filas. Es como darle una Poción a todo el PC de Bill a la vez.
P: ¿Qué pasa si ejecutás `UPDATE pokemon SET nivel = 50` sin cláusula `WHERE`?
- Solo actualiza el primer Pokémon de la tabla
- Da un error: el WHERE es obligatorio
+ Actualiza el nivel de TODOS los Pokémon a 50
> Sin `WHERE`, `UPDATE` y `DELETE` afectan **todas** las filas. Siempre revisá que el `WHERE` esté antes de ejecutar.
import sqlite3
con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE pokemon (nombre TEXT, nivel INTEGER)")
con.executemany("INSERT INTO pokemon VALUES (?, ?)", [("Pikachu", 25), ("Charizard", 90)])
# todos suben 5 niveles
con.execute("UPDATE pokemon SET nivel = nivel + 5")
print(con.execute("SELECT * FROM pokemon").fetchall())
import sqlite3
con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE pokemon (nombre TEXT, nivel INTEGER)")
con.executemany("INSERT INTO pokemon VALUES (?, ?)", [("Pikachu", 25), ("Caterpie", 5), ("Charizard", 90)])
# liberamos a Caterpie
con.execute("DELETE FROM pokemon WHERE nombre = ?", ("Caterpie",))
# y a todos los muy débiles
con.execute("DELETE FROM pokemon WHERE nivel < ?", (10,))
print([f[0] for f in con.execute("SELECT nombre FROM pokemon")])
⚠️ Igual que UPDATE: DELETE sin WHERE vacía la tabla entera. Siempre revisá el WHERE antes de ejecutar.
P: ¿Cómo subirle 10 niveles a todos los Pokémon en una sola consulta SQL?
- `UPDATE pokemon SET nivel = 10`
- `UPDATE pokemon SET nivel = nivel WHERE nivel + 10`
+ `UPDATE pokemon SET nivel = nivel + 10`
> Podés usar el valor actual de la columna en el `SET`. `nivel = nivel + 10` suma 10 al valor que ya tiene cada fila.
| Cosa | Para qué |
|---|---|
UPDATE t SET col = ? WHERE ... | cambiar filas |
SET col = col + 1 | actualizar usando el valor actual |
DELETE FROM t WHERE ... | borrar filas |
sin WHERE | ⚠️ afecta TODA la tabla |
Practicá con los ejercicios de este tema. 💪
⚡ “Con gran poder viene un gran WHERE. No lo olvides nunca.”