浅谈在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实例之wxpython中Frame使用方法
Jun 09 Python
Python模拟登录12306的方法
Dec 30 Python
python获取标准北京时间的方法
Mar 24 Python
浅谈Python中copy()方法的使用
May 21 Python
使用py2exe在Windows下将Python程序转为exe文件
Mar 04 Python
Python实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
python模拟表单提交登录图书馆
Apr 27 Python
python版本五子棋的实现代码
Dec 11 Python
解决项目pycharm能运行,在终端却无法运行的问题
Jan 19 Python
Python Pexpect库的简单使用方法
Jan 29 Python
python实现动态数组的示例代码
Jul 15 Python
python Paramiko使用示例
Sep 21 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过滤危险html代码的函数
2008/07/22 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
2013/02/02 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
2017/01/20 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
调整小数的格式保留小数点后两位
2014/05/14 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
Vue.js学习之计算属性
2017/01/22 Javascript
基于JS脚本语言的基础语法详解
2017/07/22 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
JavaScript中遍历的十种方法总结
2020/12/15 Javascript
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
python内置数据类型之列表操作
2018/11/12 Python
python实现合并两个排序的链表
2019/03/03 Python
python如何实现代码检查
2019/06/28 Python
python字典嵌套字典的情况下找到某个key的value详解
2019/07/10 Python
Pytorch中的variable, tensor与numpy相互转化的方法
2019/10/10 Python
Python读取YAML文件过程详解
2019/12/30 Python
python logging.info在终端没输出的解决
2020/05/12 Python
golang/python实现归并排序实例代码
2020/08/30 Python
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
公司同意接收函
2014/01/13 职场文书
新春联欢会主持词
2014/03/24 职场文书
质量承诺书格式
2014/05/20 职场文书
公司内部升职自荐信
2015/03/27 职场文书
酒店工程部主管岗位职责
2015/04/16 职场文书
2016思想纪律作风整顿心得体会
2016/01/23 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript