使用Django搭建一个博客系统5.1——学习一下查询集(QuerySet对象管理器)

QuerySet方法的主要功能是查询,用于查询后台数据库中的信息,通过manage.py可以shell进去看到一些条件来查询。
而且我们在views.py中写的一些方法,比如获取文章列表,获取文章详情页。都是通过这个来的。

不过在views.py中没有看到相关语句,是在模板中吗???

一、Shell环境下调用QuerySet(先练习一下命令,看看效果。)

调用Django_Api使用QuerySet,需要利用到一级mysite目录下的***manage.py***。
一级mysite目录下运行cmd命令:
***python manage.py shell***进入shell环境,
***python manage.py***通过这个命令可以看看都有啥命令
如果有虚拟环境的话,要先在shell环境下进入虚拟环境

ORM技术:对象关系映射,对象映射数据库

这个应该可以将在前端发布的数据添加到后台

1、创建对象(shell环境,命令提示符下)

(1)引用
from django.contrib.auth.models import User
from blog.models import Post

(2)获取用户——get user
user=User.object.get(username=‘admin’)
可以再输入一下user看看结果,结果是 User:admin

(3)实例化一个Post类——Post object——其实就是发布了一篇文章
post=Post.objects.create(title=‘shell test’,slug=‘stest’,body=‘post test’,author=user)
title=‘shell test’ 代表标题名
slug=‘stest’ 代表文章名
body=‘post test’ 代表文章内容
author=user 代表作者
可以再输入一下post看看结果,结果是 <Post:shell test>

(4)保存到数据库
post.save()

运行一下服务器,打开后台后,可以看到新发布了一条标题为shell test的文章。

2、更新对象(shell环境,命令提示符下)

post.title='hello’
将刚才文章标题改为hello

3、获取对象(shell环境,命令提示符下)

post.objects.all()
data=post.objects.all()
for i in data:
    print(i)

post.objects.all()代表获取所有对象
data就是将对象遍历了一下,也可以输入data[1] 、 data[7] 等

二、QuerySet的常用方法

filter() —— 数据集查询的函数,过滤符合条件的
excluede() —— 过滤不符合条件的
order_by() —— 排序
all() —— 所有的queryset
get() —— 获取唯一元素,不唯一会报错
first() —— 获取第一个元素
last() —— 获取最后一个元素
exists() —— 检查某条记录是否存在
update() —— 更新字段
delete() —— 删除指定记录
create() —— 创建
save() —— 保存

三、再举几个例子

1、查询

查询发布时间是2018年的
Post.objects.filter(publish_year=2018)

查询发布时间是2018年,且作者是admin的
Post.objects.filter(publish_year=2018,auther_username=‘admin’)

查询发布时间是2018年,且作者不是admin的
Post.objects.filter(publish_year=2018).exclude(author_username=‘admin’)

之前在第三节课,编辑models.py文件时有定义
时间问题:
publish=models.DateTimeField(default=timezone.now)#发布时间,默认为当前日期。
publish是发布时间,有年月日,所有publish_year就是发布的年
作者问题:
author=models.ForeighKey(User,related_name=“blog_posts”)#作者就是登陆用户,是个外键,等一下要定义用户表,从那里边找数据,多对一的方式。
User这个表有什么办法可看到吗?username是他的某一个列吗??

2、排序

用title正向排序
Post.objects.order_by(‘title’)

用title反向排序,加个减号
Post.objects.order_by(’-title’)

3、删除方法

分两步:

先查询,确认唯一性,
post=Post.objects.get(id=4)

然后再删除
post.delete()

4、QuerySet方法,创建一个用户

user=User.objects.create(Username=‘test’)
user.save()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值