练习 - 使用数据
通过创建模型,我们创建了一个可用于访问数据库中的数据的 API。 通过此 API,我们可以创建、检索、更新和删除数据库中的对象。
接下来让我们通过使用已创建的模型来了解 API。
配置交互式 Shell
Django 包括一个交互式 Shell,你可以在其中运行 Django 环境中的 Python 代码。
选择“视图”>“终端”,返回到 Visual Studio Code 的终端。
输入以下命令启动 Shell:
python manage.py shell
从
dog_shelters
内的models
导入模型:from dog_shelters.models import Shelter, Dog
创建并修改对象
因为我们的模型属于 Python 类,所以我们使用创建对象所使用的同一语法创建新实例。 由于它们继承自 Django.models.Model
,因此继承了 Django ORM 的功能。 该功能包括可用于将对象保存到数据库的 save
。
通过在 Shell 中运行以下 Python 命令创建新的收容所:
shelter = Shelter(name="Demo shelter", location="Seattle, WA") shelter.save()
save
部分将对象写入数据库。 由于我们从头开始创建此对象,因此它将在数据库中执行INSERT
语句。通过设置
location
字段并调用save
,将收容所的位置更新为华盛顿的雷德蒙德:shelter.location = "Redmond, WA" shelter.save()
此命令将发出更新数据库中的值的
UPDATE
语句。在 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
属性提供多个函数,包括 all
、filter
和 get
。
运行以下命令,检索 Demo shelter 中的所有狗:
shelter.dog_set.all()
dog_set
部分存储特定收容所的所有狗的列表。 Django 将返回包含我们已创建的两只狗的QuerySet
对象。<QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
使用
get
检索第二只狗,如以下命令所示:Dog.objects.get(pk=1)
get
函数仅返回一个对象。 你可以将参数传递到get
,提供查询字符串。 我们在这里使用pk
,这是表示主键的特殊关键字。 返回的结果为 Sammy。<Dog: Sammy>
使用
filter
检索 Demo shelter 中的所有狗,如以下命令所示:Dog.objects.filter(shelter__name='Demo shelter')
与
get
类似,filter
允许我们在参数中传递查询。 请注意,我们可以使用两个下划线 (__
) 在不同属性之间进行切换。 如果我们要在名为 Demo shelter 的收容所中查找所有狗,可以使用shelter__name
访问shelter
的name
属性。 返回的结果将是所有狗,这是因为我们只有一个收容所。<QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
关闭 Shell
处理完对象后,可以运行 exit()
命令关闭 Shell。
总结
你现在已经了解了如何通过 Django ORM 以编程方式使用 Django 中的数据。