Django文档阅读之查询

创建对象

为了在Python对象中表示数据库表数据,Django使用直观的系统:模型类表示数据库表,该类的实例表示数据库表中的特定记录。

要创建对象,请使用模型类的关键字参数对其进行实例化,然后调用save()以将其保存到数据库中。

>>> from blog.models import Blog
>>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.') >>> b.save()
要在单个步骤中创建和保存对象,请使用该 create()方法。
要保存对已存在于数据库中的对象的更改,请使用 save()
更新ManyToManyField工作的方式略有不同 - 使用 add()字段上的方法向关系添加记录,而不是用save()。

检索对象

要从数据库中检索对象,请在模型类上构建一个 QuerySetvia a Manager

QuerySet表示数据库中的对象集合。它可以有零个,一个或多个过滤器过滤器根据给定的参数缩小查询结果范围。在SQL术语中,a QuerySet等于SELECT语句,过滤器是限制子句,如WHERELIMIT

从表中检索对象的最简单方法是获取所有这些对象。为此,请使用以下all()方法

要创建此类子集,请优化初始 QuerySet添加过滤条件。两种最常见的改进方法QuerySet是:

filter(**kwargs)
返回 QuerySet 包含与给定查找参数匹配对象。
exclude(**kwargs)
返回 QuerySet 包含与给定查找参数 匹配对象

查找参数(**kwargs在上面的函数定义中)应采用下面的字段查找描述的格式

例如,要获取QuerySet2006年的博客条目,请使用filter()如下:

Entry.objects.filter(pub_date__year=2006)

检索单个对象get()

filter()QuerySet即使只有一个对象与查询匹配,它总会给你一个 - 在这种情况下,它将QuerySet包含一个元素。

如果您知道只有一个对象与您的查询匹配,则可以使用直接返回对象的 get()方法 Manager

>>> one_entry = Entry.objects.get(pk=1)
请注意,使用get()和使用 filter()切片之间存在差异 [0]如果没有与查询匹配的结果, get()则会引发DoesNotExist 异常。
 

使用Python的数组切片语法的子集将您限制 QuerySet为一定数量的结果。这相当于SQL LIMITOFFSET子句。

 

例如,这将返回前5个对象():LIMIT 5

>>> Entry.objects.order_by('headline')[0] 

这大致相当于:

>>> Entry.objects.order_by('headline')[0:1].get()
 
>>> Entry.objects.all()[:5]
 

猜你喜欢

转载自www.cnblogs.com/roygood/p/10113289.html