一、基礎概念
Django是Python的一個高級Web框架,其ORM(Object Relational Mapping,對象關係映射)是一種把數據庫映射成對象的技術,使得開發人員可以通過面向對象的方式來操作數據庫,而不是直接寫SQL語句。ORM是Django的核心之一,其提供了一整套的操作數據庫的API,這樣開發人員可以通過簡單的Python語法來操作數據庫,而不需要手寫SQL語句。
在Django中,一個Model(模型)代表了一個數據庫表,而一個Model的每個實例代表了該表中的一條記錄。使用ORM,你可以非常容易地對數據庫進行增刪改查的操作。
二、更新單個記錄信息
更新單個記錄可以通過以下兩種方式來實現:
1. 使用QuerySet的update()方法
QuerySet是Django中ORM的一個重要概念,表示從數據庫查詢出的一組記錄。利用QuerySet的update()方法可以更新QuerySet中的所有記錄,這種方式非常適合批量修改。
from myapp.models import MyModel # 將表中字段名為name的值為'foo'的記錄中的字段age的值更新為18 MyModel.objects.filter(name='foo').update(age=18)
這裡的MyModel是一個繼承自Django自帶的models.Model的類,通過該類創建的實例對應一條數據庫記錄。objects表示該model的管理器,其中包含了若干方法,其中之一就是filter()方法,用於根據條件過濾記錄。update()方法用於修改查詢結果集中所有記錄的指定字段。
2. 直接修改實例屬性並調用save()方法
Django提供了非常簡便的方式更新單個實例。只需要獲取該實例,修改實例屬性,最後調用實例的save()方法即可。下面是一個例子:
from myapp.models import MyModel # 獲取主鍵為1的記錄 mymodel = MyModel.objects.get(pk=1) # 修改字段值 mymodel.name = 'bar' mymodel.age = 20 # 保存修改 mymodel.save()
這裡的pk是指primary key,也就是主鍵,pk=1表示獲取主鍵值為1的記錄,get方法要求必須保證只能獲取到一個滿足條件的記錄。如果有多個符合條件的記錄,會拋出MultipleObjectsReturned異常。
三、更新多個記錄信息
更新多個記錄可以通過以下方式實現:
1. 使用for循環遍歷所有需要修改的記錄並調用save()方法
當需要對某個模型下的所有記錄進行更新時,可以使用for循環迭代所有記錄,然後修改記錄屬性並且調用save()方法:
from myapp.models import MyModel # 獲取符合條件的所有記錄 queryset = MyModel.objects.filter(age__gt=18) for mymodel in queryset: # 修改字段值 mymodel.age += 1 # 保存修改 mymodel.save()
這裡的__gt表示大於,filter(age__gt=18)表示篩選出age大於18歲的所有記錄。
2. 使用bulk_update()方法批量更新
如果需要更高效地批量更新記錄,可以使用bulk_update()方法,該方法可以將修改應用到內存中,然後批量提交到數據庫中,大大提升了效率。
from myapp.models import MyModel # 獲取符合條件的所有記錄 queryset = MyModel.objects.filter(age__gt=18) for mymodel in queryset: # 修改字段值 mymodel.age += 1 # 批量更新所有記錄的age字段值 MyModel.objects.bulk_update(queryset, ['age'])
bulk_update()方法需要傳遞兩個參數:第一個是一個QuerySet對象,表示需要更新的多個實例;第二個參數是一個列表,該列表中傳遞需要更新的字段名稱。
四、小結
ORM是Django的重要特性之一,其可以將數據庫中的表映射為Python中的類,然後通過類似於Python調用的方式對數據庫進行增刪改查的操作。本文介紹了Django ORM中如何更新單個和多個記錄的操作方法,大大簡化了對數據庫進行更新的難度,也提升了開發效率和可讀性。
原創文章,作者:PJDA,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/138293.html