练习 - 使用数据

已完成

通过创建模型,我们创建了一个可用于访问数据库中的数据的 API。 通过此 API,我们可以创建、检索、更新和删除数据库中的对象。

接下来让我们通过使用已创建的模型来了解 API。

配置交互式 Shell

Django 包括一个交互式 Shell,你可以在其中运行 Django 环境中的 Python 代码。

  1. 选择“视图”>“终端”,返回到 Visual Studio Code 的终端。

  2. 输入以下命令启动 Shell:

    python manage.py shell
    
  3. dog_shelters 内的 models 导入模型:

    from dog_shelters.models import Shelter, Dog
    

创建并修改对象

因为我们的模型属于 Python 类,所以我们使用创建对象所使用的同一语法创建新实例。 由于它们继承自 Django.models.Model,因此继承了 Django ORM 的功能。 该功能包括可用于将对象保存到数据库的 save

  1. 通过在 Shell 中运行以下 Python 命令创建新的收容所:

    shelter = Shelter(name="Demo shelter", location="Seattle, WA")
    shelter.save()
    

    save 部分将对象写入数据库。 由于我们从头开始创建此对象,因此它将在数据库中执行 INSERT 语句。

  2. 通过设置 location 字段并调用 save,将收容所的位置更新为华盛顿的雷德蒙德:

    shelter.location = "Redmond, WA"
    shelter.save()
    

    此命令将发出更新数据库中的值的 UPDATE 语句。

  3. 在 Shell 中运行以下 Python 命令,为收容所创建两只新狗:

    Dog(name="Sammy", description="Cute black and white dog", shelter=shelter).save()
    Dog(name="Roscoe", description="Lab mix", shelter=shelter).save()
    

    与前面一样,save 插入新狗。 请注意我们将 shelter 参数设置为我们之前创建的 shelter 对象的方式。 Django 将自动设置数据库中的关系。

    另请注意,我们没有为每个 Dog 实例设置局部变量。 由于我们不会重复使用对象,因此无需将其设置为变量。

检索对象

为了从数据库中检索对象,Django 为所有 Model 类提供 objects 属性。 objects 属性提供多个函数,包括 allfilterget

  1. 运行以下命令,检索 Demo shelter 中的所有狗:

    shelter.dog_set.all()
    

    dog_set 部分存储特定收容所的所有狗的列表。 Django 将返回包含我们已创建的两只狗的 QuerySet 对象。

    <QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
    
  2. 使用 get 检索第二只狗,如以下命令所示:

    Dog.objects.get(pk=1)
    

    get 函数仅返回一个对象。 你可以将参数传递到 get,提供查询字符串。 我们在这里使用 pk,这是表示主键的特殊关键字。 返回的结果为 Sammy。

    <Dog: Sammy>
    
  3. 使用 filter 检索 Demo shelter 中的所有狗,如以下命令所示:

    Dog.objects.filter(shelter__name='Demo shelter')
    

    get 类似,filter 允许我们在参数中传递查询。 请注意,我们可以使用两个下划线 (__) 在不同属性之间进行切换。 如果我们要在名为 Demo shelter 的收容所中查找所有狗,可以使用 shelter__name 访问 sheltername 属性。 返回的结果将是所有狗,这是因为我们只有一个收容所。

    <QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
    

关闭 Shell

处理完对象后,可以运行 exit() 命令关闭 Shell。

总结

你现在已经了解了如何通过 Django ORM 以编程方式使用 Django 中的数据。