浅谈在django中使用filter()(即对QuerySet操作)时踩的坑


Posted in Python onMarch 31, 2020

代码伺候:

先看如下代码:

例1:

  message = Message.objects.filter(pk=message_id2)
 
   message[0].id = message_id2
   message[0].content = content2
   message[0].message_type = message_type2
print(message[0].id)
print(message[0].content)
 
   message[0].save()

可正常从QuerySet中读取数据,并打印出来,无误。可是无法将数据同步到数据库中。

(1)all()返回的是QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。

例如有Book表,其包含bookname,booknum两个属性, 如何使用Objects.all(),得到bookname和booknum的值

(2)filter() 返回的是QuerySet对象,与all()相似,只是all()是查询所有数据,常用:filter表示‘ = ',exclude表示' != '。

(3)get()返回的是Model对象,类型为列表,说明使用get方法会直接执行sql语句获取数据。

来看一个QuerySet对象:

浅谈在django中使用filter()(即对QuerySet操作)时踩的坑

message = Message.objects.filter(pk=message_id2)
message[0].content

这样子确实可以读取到QuerySet中的数据,可是对QuerySet修改后的数据无法保存到数据库。

例1中不要尝试通过message.save()的方式去同步数据到数据库,因为QuerySet不存在save()方法。

正确写法如下:

要想同步到数据库中,需使用对象进行数据同步操作。

例2:

message = Message.objects.filter(pk=message_id2).first()
 
   message.id = message_id2
   message.content = content2
   message.message_type = message_type2
   message.save()

补充知识:Django filter和get的个人体会

开发环境:Ubuntu16.04+Django 1.11.9+Python2.7

filter返回的QuerySet:

filter返回的是QuerySet,可以切片以及遍历,get则不行.因为get只能获取唯一存在的数据,不存在或者存在多条都会报错.

在没有符合条件的值的时候:

get会报错

Book matching query does not exist.

filter则返回一个空列表,并不会报错.

<QuerySet []>`

继续往下执行代码

判断filter是否有值的时候:

book_info = Book.objects.filter(id=book_id, request_type=2)

queryset.exists()
if book_info.exists():

queryset.count==0:
if queryset.count>0:
  pass
else:
  pass
if queryset:
if queryset:
  pass
else:
  pass

filter也会有报错的情况:

filter字段类型为int的时候,输入的参数却是str的时候会报错:

invalid literal for int() with base 10: 'Yu'

使用get的时候,错误信息与上面filter一致.

filter字段存在,但是filter不到对应值的时候:

输出为:<QuerySet []>

为空的时候,自然也不能[0],取值.

使用filter作为过滤条件更新数据的时候:

Book.objects.filter(id=book_id, request_type=2).order_by("-time")[0].update(result=note)

会报错:

'Book' object has no attribute 'update'

使用filter不能部分更新,必须更新所有符合条件的.

但是可以使用[0]可以获取符合过滤条件的第一个值,

解决办法,使用save():

book_info = Book.objects.filter(id=book_id, request_type=2).order_by("-time")[0]
book_info.result = note
book_info.save()

filter 字段后常见的

这里是双下划线,__

__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__contains 包含
__icontains 包含 忽略大小写
__startswith 以...开头
__istartswith 以...开头 忽略大小写
__endswith 以...结尾
__iendswith 以...结尾,忽略大小写

以上这篇浅谈在django中使用filter()(即对QuerySet操作)时踩的坑就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python根据经纬度计算距离示例
Feb 16 Python
Python中的引用和拷贝浅析
Nov 22 Python
浅谈Python 字符串格式化输出(format/printf)
Jul 21 Python
python之PyMongo使用总结
May 26 Python
python中关于for循环的碎碎念
Jun 30 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
Python设计模式之观察者模式原理与用法详解
Jan 16 Python
python pygame实现挡板弹球游戏
Nov 25 Python
pytorch中torch.max和Tensor.view函数用法详解
Jan 03 Python
python实现图像拼接
Mar 05 Python
Python实现打包成库供别的模块调用
Jul 13 Python
使用BeautifulSoup4解析XML的方法小结
Dec 07 Python
Python sorted排序方法如何实现
Mar 31 #Python
解决Django中checkbox复选框的传值问题
Mar 31 #Python
Python文本文件的合并操作方法代码实例
Mar 31 #Python
Python调用接口合并Excel表代码实例
Mar 31 #Python
Python如何批量获取文件夹的大小并保存
Mar 31 #Python
Django使用list对单个或者多个字段求values值实例
Mar 31 #Python
django实现模板中的字符串文字和自动转义
Mar 31 #Python
You might like
本地计算机无法启动Apache故障处理
2014/08/08 PHP
js类的静态属性和实例属性的理解
2009/10/01 Javascript
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
jQuery.each()用法分享
2012/07/31 Javascript
深入探讨JavaScript String对象
2015/03/09 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
Express + Node.js实现登录拦截器的实例代码
2017/07/01 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
使用vue如何构建一个自动建站项目
2018/02/05 Javascript
详解JavaScript中的坐标和距离
2019/05/27 Javascript
在VUE style中使用data中的变量的方法
2020/06/19 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
[01:01:22]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python中多线程thread与threading的实现方法
2014/08/18 Python
Python操作Sql Server 2008数据库的方法详解
2018/05/17 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
pytorch 查看cuda 版本方式
2020/06/23 Python
如何解决安装python3.6.1失败
2020/07/01 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
Html5 video标签视频的最佳实践
2020/02/26 HTML / CSS
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
庆七一活动方案
2014/01/25 职场文书
运动会获奖感言
2014/02/11 职场文书
大学生联谊活动策划书(光棍节)
2014/10/10 职场文书
作风建设年度心得体会
2014/10/29 职场文书
工地材料员岗位职责
2015/04/11 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
Python+Matplotlib+LaTeX玩转数学公式
2022/02/24 Python