浅谈在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中捕捉详细异常信息的代码示例
Sep 18 Python
Python编程pygame模块实现移动的小车示例代码
Jan 03 Python
Django配置celery(非djcelery)执行异步任务和定时任务
Jul 16 Python
基于python的socket实现单机五子棋到双人对战
Mar 24 Python
Djang的model创建的字段和参数详解
Jul 27 Python
python实现批量修改服务器密码的方法
Aug 13 Python
windows 10 设定计划任务自动执行 python 脚本的方法
Sep 11 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
Feb 06 Python
Python unittest框架操作实例解析
Apr 13 Python
小 200 行 Python 代码制作一个换脸程序
May 12 Python
Python 如何展开嵌套的序列
Aug 01 Python
Python切片列表字符串如何实现切换
Aug 06 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
php导入csv文件碰到乱码问题的解决方法
2014/02/10 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
详解JavaScript的回调函数
2015/11/20 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
JavaScript闭包和回调详解
2017/08/09 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
Vue中qs插件的使用详解
2020/02/07 Javascript
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
人机交互程序 python实现人机对话
2017/11/14 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
Pytorch转onnx、torchscript方式
2020/05/25 Python
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
药学专业毕业生求职信
2013/10/20 职场文书
晚归检讨书
2014/02/19 职场文书
反腐倡廉演讲稿
2014/05/22 职场文书
委托收款证明
2015/06/23 职场文书
创业计划书之冷饮店
2019/09/27 职场文书
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技