利用Django对数据库数据进行查询
利用 Django 对数据库数据进行查询 from django.db import models class Blogmodels.Model name models.CharFieldmax_length100 tagline models.TextField def __str__self __unicode__ on Python 2 return self.name class Authormodels.Model name models.CharFieldmax_length200 email models.EmailField def __str__self __unicode__ on Python 2 return self.name class Entrymodels.Model blog models.ForeignKeyBlog, on_deletemodels.CASCADE headline models.CharFieldmax_length255 body_text models.TextField pub_date models.DateField mod_date models.DateField authors models.ManyToManyFieldAuthor n_comments models.IntegerField n_pingbacks models.IntegerField rating models.IntegerField def __str__self __unicode__ on Python 2 return self.headline 保存对象 要更改已存在于数据库的对象然后进行保存,使用save。 例如 b5.name ‘New Name’ b5.save 存储 ForeignKey和 ManyToManyField 更新 ForeignKey字段和更新普通字段的方法相同 from blog.models import Blog, Entry entry Entry.objects.getpk1 cheese_blog Blog.objects.getname“Cheddar Talk“ entry.blog cheese_blog entry.save 更新 ManyToManyField,可以使用 add字段 From blog.models improt Author Joe Author.objects.createname”Joe” entry.authors.addJoe 当需要一次添加多个记录时,在add中将需要添加的字段都加上 john Author.objects.createname”John” paul Author.objects.createname”Paul” george Author.objects.createname”George” ringo Author.objects.createname”Ringo” Entry.authors.addjohn, paul, george, ringo 检索对象 检索所有对象 从数据库表中检索对象的最简单方法是获取所有对象 All_entries Entry.objects.all 使用过滤器检索特定的对象 在 QuerySet 中用 all返回数据库的表中的所有对象。但是通常情况下,我们只需 要完整对象集中的一部分。 在这种情况下可以使用下面方法,添加过滤条件 Filter**kwargs返回一个新的 QuerySet 包含给定查找参数的对象/ Exclude**kwargs返回除给定查找参数之外的对象。 例如,需要获得 QuerySet2006 年的博客条目,使用 filter如下所示 Entry.objects.filterpub_date__year2006 相当于 Entry.objects.all.filterpub_date__year2006 组合过滤 例如 Entry.objects.filter .headline__startswithWhat . .exclude .pub_date__gtedatetime.date.today . .filter .pub_date__gtedatetime.date2005, 1, 30 . 表示为以 2005 年 1 月 30 日和当天发布的“What”开头的数据。 已筛选的 QuerySets 是唯一的 每当你重新定义一个 QuerySet,你就会得到一个新的 QuerySet,这个 QuerySet 和 你现在的定义绑定。他可以重复使用或重新定义。 例如 q1 Entry.objects.filterheadline__startswith“What“ q2 q1.excludepub_date__gtedatetime.date.today q3 q1.filterpub_date__gtedatetime.date.today Q1 为以 What 开头的数据,q2 继承 q1 在 q1 基础上排除时间为今天的数据,q3 继 承 q1 在 q1 基础上过滤为时间是今天的。 查询表达式 查询表达式描述可用作更新、 创建、 过滤、 排序、 注释或聚合的一部分的值或计算。 有很多的内置表达式可以用于查询。 表达式可以组合,或在某些情况下进行嵌套, 用于 更复杂的计算。 支持的算术 Django 支持使用 Python 常量,变量,甚至其他的表达式对查询表达式进行 加法,减法,乘法,除法,模运算和运算符运算。 例子 from django.db.models import F, Count, Value from django.db.models.functions import Length, Upper Find companies that have more employees than chairs. Company.objects.filternum_employees__gtFnum_chairs Find companies that have at least twice as many employees as chairs. Both the querysets below are equivalent. Company.objects.filternum_employees__gtFnum_chairs * 2 Company.objects.filter num_employees__gtFnum_chairs