内容简介:
介绍Django中的F和Q作用以及使用方法
通常情况下我们在更新数据时需要先从数据库里将原数据取出后方在内存里,然后编辑某些属性,最后提交。例如:
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
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=)
参考: