📜  Django ORM – 插入、更新和删除数据

📅  最后修改于: 2022-05-13 01:54:37.410000             🧑  作者: Mango

Django ORM – 插入、更新和删除数据

先决条件: Django 模型

Django 允许我们使用称为ORM(对象关系映射器)的数据库抽象API 与其数据库模型进行交互,即添加、删除、修改和查询对象。本文讨论了我们可以使用 Django ORM 执行的所有有用操作。

出于演示目的,我们将使用以下 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

我们可以通过在项目目录中运行以下命令来访问 Django ORM。

python manage.py shell

这将我们带到了一个交互式Python控制台。假设我们的模型存在于myProject/albums/models.py ,我们可以使用以下命令导入我们的模型:

>>> from books.models import Song, Album

添加对象

要创建模型 Album 的对象并将其保存到数据库中,我们需要编写以下命令:

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

要创建模型 Song 的对象并将其保存到数据库中,我们需要编写以下命令:

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

检索对象

为了演示,让我们再添加 2 个专辑记录。

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

要检索模型的所有对象,我们编写以下命令:

>>> Album.objects.all()
, , ]>

输出是一个 QuerySet,或一组与查询匹配的对象。请注意,打印的名称是__str__()函数的输出。

我们还可以使用函数filter()exclude()get()过滤查询。 filter()函数返回一个 QuerySet,其中包含与给定查找参数匹配的对象。

>>> Album.objects.filter(artist = "The Beatles")
, ]>

exclude()函数返回一个 QuerySet,其中包含与给定查找参数匹配的对象以外的对象。

>>> Album.objects.exclude(genre = "Rock")
]>

get()函数返回与给定查找参数匹配的单个对象。当查询返回多个对象时会出错。

>>> Album.objects.get(pk = 3)
]>

修改现有对象

我们可以如下修改现有对象:

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

删除对象

要删除单个对象,我们需要编写以下命令:

>>> a = Album.objects.get(pk = 2)
>>> a.delete()
>>> Album.objects.all()
, ]>

要删除多个对象,我们可以使用filter()exclude()函数,如下所示:

>>> Album.objects.filter(genre = "Pop").delete()
>>> Album.objects.all()