电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Django中Q查詢及Q()對象 F查詢及F()對象用法

瀏覽:167日期:2024-09-27 13:01:18

Django Q/F

#1 環境

Python3.7.3

Django==2.0.6

#2 開始

#2.1 django F()表達式

每次獲取times當前的值,再+1,這樣需要將times值取出,存到內存中

obj = models.Test.objects.get(name='cox')obj.times = obj.times + 1obj.save()

雖然 obj.times = F(“times”) + 1

看起來像常規的Python為實例屬性賦值,但實際上它是一個描述數據庫上操作的SQL結構

當Django遇到要給F()實例,它會覆蓋標準的Python運算符來創建一個封裝的SQL表達式;在這個例子中,指示數據庫增加由 obj.times 表示的數據庫字段。

無論 obj.times 的值是或曾是什么,Python永遠不需要知道?完全由數據庫來處理。Python通過Django的F()類做的所有事情僅是參考某個字段創建SQL語法來描述操作。

obj = models.Test.objects.get(name='cox')obj.times = F('times') + 1obj.save()

因此,F()可以通過以下方式提供性能優勢

直接在數據庫中操作而不是python

減少一些操作所需的數據庫查詢次數

#2.2 F()操作在 obj.save() 后會持續存在

如果times的值是1,那么經過n次save()之后,times的值是2

obj = models.Test.objects.get(name='cox')obj.times = obj.times + 1obj.save()obj.save()obj.save()

如果times的值是1,那么經過n次save()之后,times的值是1+n,而不是2,就是因為F()操作在 obj.save() 后會持續存在

obj = models.Test.objects.get(name='cox')obj.times = F('times') + 1obj.save()obj.save()obj.save()

#2.3 F()再過濾(filter)中的使用

獲取表中收入(input_price)大于支出(output_price)的數據

models.Test.objects.filter(input_price__gt=F('output_price'))

Django支持F()對象使用加、減、乘、除、取模和冪運算等算術操作,兩個操作數可以是常數或F()對象

models.Test.objects.filter(input_price__gt=F('output_price')*2)

models.Test.objects.filter(input_price__gt=F('output_price')+F('output_price'))

你還可以在F()對象中使用雙下劃線標記來跨越關聯關系。 帶有雙下劃線的F()對象將引入任何需要的join 操作以訪問關聯的對象

models.Test.objects.filter(authors__name=F(’blog__name’))

對于date 和date/time 字段,你可以給它們加上或減去一個timedelta對象

from datetime import timedelta

models.Test.objects.filter(mod_date__gt=F(’pub_date’) + timedelta(days=3))

#2.4 Django Q()表達式

當我們在查詢的條件中需要組合條件時(例如兩個條件“且”或者“或”)時。我們可以使用Q()查詢對象

from django.db.models import Qmodels.Author.objects.filter(Q(name='cox') | Q(name='Tom')) # 獲取在Author表中,name等于cox和name等于cox的所有數據models.Author.objects.filter(Q(name='cox') & Q(age=12))# 獲取在Author表中,name等于cox并且age等于12的所有數據

#2.5 Q()傳入條件查詢

q1 = Q()q1.connector = ’OR’q1.children.append((’name’, 'cox'))q1.children.append((’name’, 'Tom'))q1.children.append((’name’, 'Jeck')) models.Author.objects.filter(q1) # 在Author表中,name等于cox/Tom/Jeck的所有數據

con = Q()q1 = Q()q1.connector = ’OR’q1.children.append((’name’, 'cox'))q1.children.append((’name’, 'Tom'))q1.children.append((’name’, 'Jeck'))q2 = Q()q2.connector = ’OR’q2.children.append((’age’, 12))con.add(q1, ’AND’)con.add(q2, ’AND’)models.Author.objects.filter(con) # 在Author表中,name等于cox/Tom/Jeck的 并且 滿足age等于12 的所有數據

#2.6 Q()非

在Q()語句中,~代表非

models.Author.objects.filter(~Q(name='cox')) # 獲取在Author表中,name不等于cox的所有數據

補充知識:Django 中 Models 的 F()和 Q()函數

1、F() ---- 專門取對象中某列值的操作

F對象允許Django在未實際鏈接數據的情況下具有對數據庫字段的值的引用。

通常情況下我們在更新數據時需要先從數據庫里將原數據取出后方在內存里,然后編輯某些屬性,最后提交。

all = BookInfo.objects.filter(auth='小明')for b in all: price = b.price b.price = price + 10 b.save # 使用F對象來計算BookInfo.objects.filter(auth='小明').update(price=F('price')+10)

2、Q() ---- 對對象的復雜查詢

Q對象是Django對model查詢中所使用的關鍵字參數進行封裝后的一個對象。

Q對象可以通過 &(與)、 |(或)、 ~(非)運算來組合生成不同的Q對象,便于在查詢操作中靈活地運用。

from django.db.models import Q# 并且條件:與條件查詢models.User.objects.filter(條件1,條件2,條件n..)models.User.objects.filter(Q(username=’老王’) & Q(userpass=’admin’))# 或者條件:或條件models.User.objects.fliter(Q(username=’老王’) | Q(username=’老李’))# 取反條件models.User.objects.filter(~Q(username=’老王’))models.User.objects.exclude(username=’老王’)

以上這篇Django中Q查詢及Q()對象 F查詢及F()對象用法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
主站蜘蛛池模板: 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | 双齿辊破碎机-大型狼牙破碎机视频-对辊破碎机价格/型号图片-金联机械设备生产厂家 | 涡轮流量计_LWGY智能气体液体电池供电计量表-金湖凯铭仪表有限公司 | 成都中天自动化控制技术有限公司| 洁净实验室工程-成都手术室净化-无尘车间装修-四川华锐净化公司-洁净室专业厂家 | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | 期货软件-专业期货分析软件下载-云智赢| 车辆定位管理系统_汽车GPS系统_车载北斗系统 - 朗致物联 | 咖啡加盟-咖啡店加盟-咖啡西餐厅加盟-塞纳左岸咖啡西餐厅官网 | 网优资讯-为循环资源、大宗商品、工业服务提供资讯与行情分析的数据服务平台 | 包塑软管|金属软管|包塑金属软管-闵彬管业 | 精密线材测试仪-电线电缆检测仪-苏州欣硕电子科技有限公司 | 气力输送设备_料封泵_仓泵_散装机_气化板_压力释放阀-河南锐驰机械设备有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 光环国际-新三板公司_股票代码:838504 | 步进电机_agv电机_伺服马达-伺服轮毂电机-和利时电机 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | 深圳办公室装修-写字楼装修设计-深圳标榜装饰公司 | 【MBA备考网】-2024年工商管理硕士MBA院校/报考条件/培训/考试科目/提前面试/考试/学费-MBA备考网 | 柴油发电机组_柴油发电机_发电机组价格-江苏凯晨电力设备有限公司 | 温控器生产厂家-提供温度开关/热保护器定制与批发-惠州市华恺威电子科技有限公司 | Maneurop/美优乐压缩机,活塞压缩机,型号规格,技术参数,尺寸图片,价格经销商 | 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 塑钢课桌椅、学生课桌椅、课桌椅厂家-学仕教育设备首页 | 展厅装修公司|企业展厅设计|展厅制作|展厅搭建—广州展厅装饰公司 | 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 破碎机锤头_合金耐磨锤头_郑州宇耐机械工程技术有限公司 | 上海办公室装修,办公楼装修设计,办公空间设计,企业展厅设计_写艺装饰公司 | 楼承板-开口楼承板-闭口楼承板-无锡海逵 | 产业规划_产业园区规划-产业投资选址及规划招商托管一体化服务商-中机院产业园区规划网 | 钢木实验台-全钢实验台-化验室通风柜-实验室装修厂家-杭州博扬实验设备 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 深圳办公室装修,办公楼/写字楼装修设计,一级资质 - ADD写艺 | 耐高温电缆厂家-远洋高温电缆 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 螺旋丝杆升降机-SWL蜗轮-滚珠丝杆升降机厂家-山东明泰传动机械有限公司 | 便民信息网_家电维修,家电清洗,开锁换锁,本地家政公司 | 河南砖机首页-全自动液压免烧砖机,小型砌块水泥砖机厂家[十年老厂] | 睿婕轻钢别墅_钢结构别墅_厂家设计施工报价 | 不锈钢复合板厂家_钛钢复合板批发_铜铝复合板供应-威海泓方金属复合材料股份有限公司 |