Django ORM: inserción, actualización y eliminación de datos

Requisito previo: modelos de Django

Django nos permite interactuar con sus modelos de base de datos, es decir, agregar, eliminar, modificar y consultar objetos, usando una API de abstracción de base de datos llamada ORM (Object Relational Mapper). Este artículo analiza todas las operaciones útiles que podemos realizar con Django ORM.

Para fines de demostración, utilizaremos los siguientes modelos de Django.

class Album(models.Model):
    title = models.CharField(max_length = 30)
    artist = models.CharField(max_length = 30)
    genre = models.CharField(max_length = 30)
  
    def __str__(self):
        return self.title
  
class Song(models.Model):
    name = models.CharField(max_length = 100)
    album = models.ForeignKey(Album, on_delete = models.CASCADE)
  
    def __str__(self):
        return self.name

Podemos acceder al ORM de Django ejecutando el siguiente comando dentro de nuestro directorio de proyectos.

python manage.py shell

Esto nos lleva a una consola interactiva de Python. Suponiendo que nuestros modelos existen en myProject/albums/models.pypodemos importar nuestros modelos usando el siguiente comando:

>>> from books.models import Song, Album

Agregar objetos

Para crear un objeto del modelo Álbum y guardarlo en la base de datos, debemos escribir el siguiente comando:

>>> a = Album(title = "Divide", artist = "Ed Sheeran", genre = "Pop")
>>> a.save()

Para crear un objeto del modelo Song y guardarlo en la base de datos, debemos escribir el siguiente comando:

>>> s = Song(name = "Castle on the Hill", album = a)
>>> s.save()

Recuperando objetos

Agreguemos 2 registros de álbumes más por el bien de la demostración.

>>> a = Album(title = "Abbey Road", artist = "The Beatles", genre = "Rock")
>>> a.save()
>>> a = Album(title = "Revolver", artist = "The Beatles", genre = "Rock")
>>> a.save()

Para recuperar todos los objetos de un modelo, escribimos el siguiente comando:

>>> Album.objects.all()
<QuerySet [<Album: Divide>, <Album: Abbey Road>, <Album: Revolver>]>

El resultado es un QuerySet o un conjunto de objetos que coinciden con la consulta. Observe que el nombre impreso es la salida de la __str__()función.

También podemos filtrar consultas usando las funciones filter(), exclude()y get(). La filter()función devuelve un QuerySet que tiene objetos que coinciden con los parámetros de búsqueda dados.

>>> Album.objects.filter(artist = "The Beatles")
<QuerySet [<Album: Abbey Road>, <Album: Revolver>]>

La exclude()función devuelve un QuerySet que tiene objetos distintos de los que coinciden con los parámetros de búsqueda proporcionados.

>>> Album.objects.exclude(genre = "Rock")
<QuerySet [<Album: Divide>]>

La get()función devuelve un solo objeto que coincide con el parámetro de búsqueda dado. Da un error cuando la consulta devuelve varios objetos.

>>> Album.objects.get(pk = 3)
<QuerySet [<Album: Revolver>]>

Modificar objetos existentes

Podemos modificar un objeto existente de la siguiente manera:

>>> a = Album.objects.get(pk = 3)
>>> a.genre = "Pop"
>>> a.save()

Eliminación de objetos

Para eliminar un solo objeto, necesitamos escribir los siguientes comandos:

>>> a = Album.objects.get(pk = 2)
>>> a.delete()
>>> Album.objects.all()
<QuerySet [<Album: Divide>, <Album: Revolver>]>

Para eliminar varios objetos, podemos usar las funciones filter()o de la siguiente manera:exclude()

>>> Album.objects.filter(genre = "Pop").delete()
>>> Album.objects.all()
<QuerySet []>

Publicación traducida automáticamente

Artículo escrito por Abhishek De y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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