浅谈在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 正则表达式操作指南
May 04 Python
Python 搭建Web站点之Web服务器与Web框架
Nov 06 Python
python 输出上个月的月末日期实例
Apr 11 Python
Sanic框架流式传输操作示例
Jul 18 Python
python使用magic模块进行文件类型识别方法
Dec 08 Python
解决使用PyCharm时无法启动控制台的问题
Jan 19 Python
Python3实现的简单工资管理系统示例
Mar 12 Python
python中多个装饰器的调用顺序详解
Jul 16 Python
15行Python代码实现免费发送手机短信推送消息功能
Feb 27 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
python 密码学示例——理解哈希(Hash)算法
Sep 21 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
Oct 22 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
FleaPHP的安全设置方法
2008/09/15 PHP
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
php 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
php防止sql注入简单分析
2015/03/18 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
javascript中对变量类型的判断方法
2015/08/09 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
react-router4 嵌套路由的使用方法
2017/07/24 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
解决webpack无法通过IP地址访问localhost的问题
2018/02/22 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
基于Python实现的ID3决策树功能示例
2018/01/02 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
Python图像读写方法对比
2020/11/16 Python
python-地图可视化组件folium的操作
2020/12/14 Python
我们是伦敦女孩:WalG
2018/01/08 全球购物
如何获取某个日期是当月的最后一天
2013/12/05 面试题
自我鉴定书面格式
2014/01/13 职场文书
万年牢教学反思
2014/02/15 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
学校欢迎标语
2014/06/18 职场文书
优秀学生干部事迹材料
2014/12/24 职场文书
英文感谢信格式
2015/01/21 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
《酸的和甜的》教学反思
2016/02/18 职场文书
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL
我的收音机情缘
2022/04/05 无线电
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android