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

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

Django让我们与它的数据库模型进行交互,即通过一个叫做ORM(Object Relational Mapper)的数据库抽象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 [<Album: Divide>, <Album: Abbey Road>, <Album: Revolver>]>

输出是一个 QuerySet,或者说是一个符合查询的对象集。注意,所打印的名称是 str() 函数的输出。

我们还可以使用函数filter()、exclude()和get()来过滤查询。filter()函数返回一个QuerySet,其中有符合给定查询参数的对象。

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

exclude()函数返回一个查询集,其中的对象不是与给定查询参数相匹配的对象。

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

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

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

修改现有对象

我们可以按以下方式修改一个现有的对象。

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

删除对象

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

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

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

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Django 教程