查询

八:增加修改和删除操作
 
拿Article的models作为范例
添加信息的几种方式:
1.article = Article(user='li',tags=1) article.save()
2.article = Article.objects.get(user='li') article.user= "wei" article.save()
3.article = Article.objects.create(user='li') article.save()
更倾向于第三种,不过第一种也可以,第二种可以修改
 
删除操作  
article = Article.objects.get(user='li')
article.delete()
 
 
{{ article.comment_set.all.count }}
 
九:单表查询的常用方法
get() 得到一个对象,没有得到或者得到多个会报错
all()
filter() 得到符合条件的对象
exclude() 得到与输入条件相反的对象
order_by() 按一定顺序排序
distinct.values('name')  根据某一个字段进行去重
[0:10]  从0开始取
 
常用查询方式:
__exact 精确等于  例如:filter(name__exact='li')
__iexact 忽略大小写精确等于
__contains  包含有某一字段   filter(name__contains="li")
__icontains 忽略大小写包含某一字段
但对sqlite当中contains作用等于icontains
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__startswith 以…开头
__istartswith 以…开头 忽略大小写
__endswith 以…结尾
__iendswith 以…结尾,忽略大小写
__range 在…范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False
__isnull=True 与 __exact=None的区别

 filter(name__in=['li','wei'])
 
 
十三:自定义QuerySet及惰性机制
 
comment = Comment.objects.filter(user__username='li')
这样查询之后还可以接着查询comment.exclude(user__username='wei')
返回为一个QuerySet查询集,但不会真正去查询,直到使用到它的时候才去数据库里面进行查询,然后上面两句查询语句会合成一大句sql查询语句
 
自定义QuerySet其实就是写的查询语句
 
 

cate怎么理解QuerySet的查询是惰性的(当我们去执行all,filter,get,是不会去执行sql的,

当我们去调用查询结果集的时候会执行sql)gory_list Category.objects.all()[:1]导入分类信息,


这里需要传入参数,因为QuerySet查询是惰性的,不会一下子查询出所有的记录只会查询出当前页面的内容,所以当跳转页面的时候,应该重新传入参数
小技巧:type(category_list) 返回的是QuerySet   type('sss')返回str
 
 
去重复方法distinct是Django自带的去重复方法,对整个字段进行去重3、django中直接使用sql的两种方式 SELECT DISTINCT DATE_FORMAT(date_publish, '%Y-%m') as col_date FROM blog_article ORDER BY date_publish 3.1、raw (异常:Raw query must include the primary key,返回结果必须包含主键) 3.2、excute
可以直接在Django中写sql语句进行查询,但不推荐这种方式如 Article.objects.raw('
SELECT DISTINCT DATE_FORMAT(date_publish, '%Y-%m') as col_date FROM blog_article ORDER BY date_publish')
这样可以直接进行查询


#站点基本信息设置
SITE_NAME = settings.SITE_NAME
SITE_DESC = settings.SITE_DESC
comment_count_list = Comment.objects.values('article').annotate(comment_count=Count('article')).order_by('-comment_count')
article_comment_list = [Article.objects.get(pk=comment['article']) for comment in comment_count_list]
return locals()
经验证,comment['article']为Article当中的id编号





posted @ 2016-08-08 15:28  意发并行  阅读(263)  评论(0编辑  收藏  举报