Django中的F和Q函数

内容简介:

介绍Django中的F和Q作用以及使用方法

 作用:操作数据表中的某列值,F()允许Django在未实际链接数据的情况下具有对数据库字段的值的引用,不用获取对象放在内存中再对字段进行操作,直接执行原生产sql语句操作。

通常情况下我们在更新数据时需要先从数据库里将原数据取出后方在内存里,然后编辑某些属性,最后提交。例如:

obj = Order.objects.get(orderid=+= 1

上述方法生成的sql语句为:

UPDATE `core_order` SET ...,`amount` = 22 WHERE `core_order`.`orderid` =

但是我们本意想生成的sql语句为:

UPDATE `core_order` SET ...,`amount` = `amount` + 1 WHERE `core_order`.`orderid` =

此时F的使用场景就在于此:

django.db.models core.models obj = Order.objects.get(orderid=<span style="color: #800000;">'<span style="color: #800000;">12<span style="color: #800000;">'<span style="color: #000000;">)
obj.amount
= F(<span style="color: #800000;">'
<span style="color: #800000;">amount<span style="color: #800000;">') + 1<span style="color: #000000;">
obj.save()
<span style="color: #008000;">#<span style="color: #008000;">生成的sql语句为:
UPDATE core_order SET ...,amount = core_order.amount + 1 WHERE core_order.orderid = <span style="color: #800000;">'<span style="color: #800000;">12<span style="color: #800000;">' <span style="color: #008000;">#<span style="color: #008000;"> 和预计的一样

当Django程序中出现F()时,Django会使用SQL语句的方式取代标准的Python操作。

上述代码中不管 order.amount 的值是什么,Python都不曾获取过其值,python做的唯一的事情就是通过Django的F()函数创建了一条SQL语句然后执行而已。

需要注意的是在使用上述方法更新过数据之后需要重新加载数据来使数据库中的值与程序中的值对应

  order= Order.objects.get(pk=order.pk) 

或者使用更加简单的方法:

order.refresh_from_db()

 
参考博客:

<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0">

<tr>
<td><span style="font-size: 16px;">二、Q介绍</td>

</tr>

</table>

作用:对对象进行复杂查询,并支持&(and),|(or),~(not)操作符。

基本使用:

django.db.models =Asset.objects.filter(Q(hostname__icontains=keyword)|Q(ip=keyword))

如果查询使用中带有关键字查询,Q对象一定要放在前面

=date(2005,5,2)) | Q(pub_date=date(2005,6=)

参考:

相关文章

注:所有源代码均实测运行过。所有源代码均已上传CSDN,请有...
继承APIView和ViewSetMixin;作用也与APIView基本类似,提供...
一、Django介绍Python下有许多款不同的 Web 框架。Django是重...
本文从nginx快速掌握到使用,gunicorn快速掌握到使用,实现小...
uniapp微信小程序订阅消息发送服务通知
Django终端打印SQL语句 1 Setting配置: 2 默认python 使用的...