076:【Django資料庫】F表示式詳解
阿新 • • 發佈:2019-01-10
F表示式詳解:
F表示式 是用來優化 ORM 操作資料庫的。比如我們要將公司所有員工的薪水都增加1000元,如果按照正常的流程,應該是先從資料庫中提取所有的員工工資到Python記憶體中,然後使用Python程式碼在員工工資的基礎之上增加1000元,最後再儲存到資料庫中。這裡面涉及的流程就是,首先從資料庫中提取資料到Python記憶體中,然後在Python記憶體中做完運算,之後再儲存到資料庫中。示例程式碼如下:
employees = Employee.objects.all() for employee in employees: employee.salary += 1000 employee.save()
而我們的 F表示式 就可以優化這個流程,他可以不需要先把資料從資料庫中提取出來,計算完成後再儲存回去,他可以直接執行 SQL語句 ,就將員工的工資增加1000元。示例程式碼如下:
from djang.db.models import F Employee.object.update(salary=F("salary")+1000)
F表示式 並不會馬上從資料庫中獲取資料,而是在生成 SQL 語句的時候,動態的獲取傳給 F表示式 的值。比如如果想要獲取作者中, name 和 email 相同的作者資料。如果不使用 F表示式 ,那麼需要使用以下程式碼來完成:
authors = Author.objects.all()for author in authors: if author.name == author.email: print(author)
如果使用 F表示式 ,那麼一行程式碼就可以搞定。示例程式碼如下:
from django.db.models import F authors = Author.objects.filter(name=F("email"))
例項截圖如下(年齡增減):