1. 程式人生 > >076:【Django資料庫】F表示式詳解

076:【Django資料庫】F表示式詳解

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"))

例項截圖如下(年齡增減):