Modificación y Eliminación de Datos en Base de Datos con Python
Resumen
¿Cómo modificar datos de un objeto?
Modificar los datos de un objeto en Django es una parte esencial de la administración de bases de datos. Para cambiar un atributo, primero se accede a él y se le asigna un nuevo valor. Por ejemplo, si se quiere cambiar el Title de un objeto Car que inicialmente es "BMW" a "Mazda", se usará el siguiente código:
my_car.title ="Mazda"
Es importante tener en cuenta que, aunque el cambio se ha realizado en la memoria, este no se reflejará en la base de datos hasta que se guarde. Este paso es crucial para garantizar que los datos sean persistentes. Para guardar los cambios en la base de datos, se utiliza el método save():
my_car.save()
Este comando ejecuta el guardado sin emitir un mensaje, lo que indica que se ejecutó correctamente.
¿Cómo verificar cambios en la base de datos?
Para confirmar que los cambios se han realizado correctamente en la base de datos, se recomienda utilizar comandos SQL dentro de la línea de comandos de Django. Por ejemplo:
python manage.py dbshell
Dentro de la consola, se puede realizar un SELECT para comprobar los datos actualizados:
SELECT*FROM my_first_app_car;
Asegúrate de incluir el punto y coma al final para ejecutar correctamente el comando SQL. Esto mostrará los registros actuales, verificando así que el título ahora es "Mazda".
¿Cómo eliminar objetos de la base de datos?
Django simplifica el proceso de eliminación de objetos dentro de la base de datos. Para eliminar un objeto, puedes seguir estos pasos:
Crear un objeto nuevo (opcional): Antes de eliminar, es útil entender la creación de otro objeto, por ejemplo, un Car con el título "Jeep":
other_car = Car(title="Jeep")other_car.save()
Tras su creación, puedes ver este nuevo objeto también reflejado con un comando SELECT.
Eliminar un objeto existente: Para eliminar un objeto, se usa el método delete(), que retornará una tupla indicando cuántos objetos se eliminaron y de qué tipo:
my_car.delete()
Esta acción eliminará el objeto my_car y su cambio será visible mediante un nuevo SELECT en la base de datos. Al verificar, solo debe aparecer el "Jeep", habiendo desaparecido el "Mazda" de los registros.
Estos procesos son fundamentales para el manejo de datos en Django y permiten modificar y administrar información de manera eficiente. Recuerda siempre verificar mediante comandos SQL cualquier alteración directa en la base de datos para asegurar que los cambios se reflejan como se espera.
Definir el método __str__ en los modelos de Django es una buena práctica que proporciona una representación legible y significativa del objeto, facilitando la depuración y mejorando la usabilidad de la interfaz de administración. Si no se define, se usará la representación por defecto, que es menos informativa.
Si cierro el shell y ya no puedo acceder a las instancias creadas antes de cerrarlo. En el DB sí están todos los cambios creados pero en el shell ya no puedo acceder a las instancias para actualizarlas o borrarlas.
Cómo puedo acceder desde el shell a las instancias borradas?
Buenas tardes a ustedes, hay alguna manera de solucionar este error pero sin necesidad de instalar la SQLite, o alguna otra manera de consultar la base de datos
Quizás algunos no les queda muy claro aún el tema guardado en memoria y guardado en la db. Básicamente la diferencia es que la información en un db siempre es persistente, es decir, que una vez que se crea allí se va mantener sin importar si cerramos o no el shell que nos provee django, esto normalmente se utiliza para debuggear o replicar problemas, ya que normalmente tendremos otros métodos, api's u otras interfaces para registrar los datos en db, pero supongo que esto se verá más adelante.
¿Tengo que mantener abierto el shell para que no se borren los datos de la BD? En lugar de abrir otra terminal usé la misma que ya tenía para el shell (la cerré primero exit()) y luego abrí dbshell pero ya todos los datos que había guardado desaparecieron.
Hola, no, no necesitas tener abierto el shell. Los datos no se deben borrar de la BD si en la shell creaste los registros y además los guardaste (es decir usaste el método .save()). Revisa si implementaste el método .save().
Me pasó lo mismo, cerré el shell y ya no podía acceder a las instancias creadas antes de crearlo. En el DB sí estaban todos los cambios creados pero en el shell ya no podía acceder a las instancias para actualizarlas o borrarlas.
📚 Nombre de la clase
Actualización y eliminación de datos en Django
🎯 Idea principal
Django permite modificar y eliminar datos de la base de datos utilizando el ORM. A través de los modelos se pueden actualizar los valores de un registro existente o eliminarlo completamente. Estas operaciones se realizan mediante objetos de Python que Django traduce automáticamente a consultas en la base de datos.
⚡ Síntesis en 10 segundos
Django permite actualizar registros existentes.
También permite eliminar registros de la base de datos.
Estas operaciones se hacen a través de instancias de Model.
El ORM traduce las operaciones a SQL.
Permite gestionar datos sin escribir consultas SQL.
🔑 Puntos clave
Actualización de datos
Se puede modificar la información de un registro cambiando los atributos de una instancia del modelo.
Persistencia de cambios
Después de modificar los valores, se deben guardar los cambios para actualizar el registro en la base de datos.
Eliminación de registros
Django permite eliminar registros existentes mediante métodos del ORM.
Manipulación de datos mediante modelos
Todas las operaciones sobre los datos se realizan usando los modelos definidos en la aplicación.
Gestión completa de datos
El ORM permite realizar operaciones fundamentales sobre datos:
crear
consultar
actualizar
eliminar
🧠 Conceptos importantes
Actualización de registros
Proceso de modificar los datos almacenados en una fila de la base de datos.
Eliminación de datos
Proceso de borrar un registro de una tabla.
Instancia de modelo
Objeto que representa un registro dentro de una tabla de base de datos.
CRUD
Conjunto de operaciones básicas para gestionar datos:
Create
Read
Update
Delete
ORM
Sistema que permite interactuar con la base de datos usando objetos de Python.
🧩 Modelo mental de la clase
Aplicación obtiene un registro
↓
Se modifica la instancia del Model
↓
Se guardan los cambios
↓
La base de datos actualiza el registro
o
Se elimina la instancia
↓
La base de datos elimina el registro
Este flujo muestra cómo Django gestiona cambios en los datos.
🚀 Acciones inmediatas
Consultar un registro existente desde un modelo.
Modificar uno o más atributos del objeto.
Guardar los cambios para actualizar el registro.
Eliminar un registro usando los métodos del ORM.
💼 Aplicación profesional
Actualizar y eliminar datos es esencial en cualquier sistema que gestione información, por ejemplo:
editar perfiles de usuario
actualizar productos en un ecommerce
modificar registros empresariales
eliminar información obsoleta
Estas operaciones forman parte de la gestión completa de datos en aplicaciones web.
🔥 Errores comunes
Modificar datos pero olvidar guardar los cambios.
Eliminar registros sin validar si la operación es segura.
Confundir eliminar un objeto en el código con eliminarlo en la base de datos.
No considerar que eliminar datos puede afectar otras partes del sistema si existen relaciones entre modelos.
📝 Reflexión estratégica
El desarrollo de aplicaciones web gira en torno a gestionar información de forma eficiente y segura.
Las operaciones de actualización y eliminación permiten mantener los datos del sistema correctos y actualizados. Comprender cómo el ORM maneja estas acciones ayuda a construir aplicaciones que manipulan información de manera clara, controlada y mantenible.
Es necesario crear nuevos carros y guardarlos con el .save() desde python manage.py shell ?
O se puede hacer todos los registros desde python manage.py dbshell con puro SQL normal?
Osea yo veo que funciona normal crear, actualizar y eliminar desde dbshell, pero quiero saber si afecta en algo que no lo haga con shell?
No se si ya lo encontraste pero en django existe un comando que se llama inspectdb que sirve justamente para transformar las tablas ya creadas en modelos de django