新聞中心
使用批量方法來減少SQL語句

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計、做網(wǎng)站與策劃設(shè)計,松陽網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:松陽等地區(qū)。松陽做網(wǎng)站價格咨詢:18980820575
批量創(chuàng)建
當創(chuàng)建對象時,盡可能使用 ?bulk_create()? 方法來減少 SQL 查詢數(shù)量。比如:
Entry.objects.bulk_create([
Entry(headline='This is a test'),
Entry(headline='This is only a test'),
])要優(yōu)于:
Entry.objects.create(headline='This is a test')
Entry.objects.create(headline='This is only a test')批量更新
當更新對象時,盡可能使用 ?bulk_update()? 方法來減少 SQL 查詢數(shù)。給定對象的列表或查詢集:
entries = Entry.objects.bulk_create([
Entry(headline='This is a test'),
Entry(headline='This is only a test'),
])下面示例:
entries[0].headline = 'This is not a test'
entries[1].headline = 'This is no longer a test'
Entry.objects.bulk_update(entries, ['headline'])要優(yōu)于:
entries[0].headline = 'This is not a test'
entries[0].save()
entries[1].headline = 'This is no longer a test'
entries[1].save()批量插入
當插入對象到 ?ManyToManyFields?時,使用帶有多個對象的 ?add()? 來減少 SQL 查詢的數(shù)量。舉例:
my_band.members.add(me, my_friend)要優(yōu)于:
my_band.members.add(me)
my_band.members.add(my_friend)其中 ?Bands?和 ?Artists?有多對多關(guān)系。
當不同的對象對插入到 ?ManyToManyField?或者自定義的 ?through?表被定義時,可以使用 ?bulk_create()? 方法來減少 SQL 查詢的數(shù)量。比如:
PizzaToppingRelationship = Pizza.toppings.through
PizzaToppingRelationship.objects.bulk_create([
PizzaToppingRelationship(pizza=my_pizza, topping=pepperoni),
PizzaToppingRelationship(pizza=your_pizza, topping=pepperoni),
PizzaToppingRelationship(pizza=your_pizza, topping=mushroom),
], ignore_conflicts=True)要優(yōu)于:
my_pizza.toppings.add(pepperoni)
your_pizza.toppings.add(pepperoni, mushroom)批量刪除
當從 ?ManyToManyFields?刪除對象時,可以使用帶有多個對象的 ?remove()? 來減少 SQL 查詢的數(shù)量。比如:
my_band.members.remove(me, my_friend)要優(yōu)于:
my_band.members.remove(me)
my_band.members.remove(my_friend)其中 ?Bands?和 ?Artists?有多對多關(guān)系。
當從 ?ManyToManyFields?里刪除不同的對象對時,可以在帶有多種 ?through?模型實例的 ?Q?表達式上使用 ?delete()? 來減少 SQL 查詢的數(shù)量。比如:
from django.db.models import Q
PizzaToppingRelationship = Pizza.toppings.through
PizzaToppingRelationship.objects.filter(
Q(pizza=my_pizza, topping=pepperoni) |
Q(pizza=your_pizza, topping=pepperoni) |
Q(pizza=your_pizza, topping=mushroom)
).delete()要優(yōu)于:
my_pizza.toppings.remove(pepperoni)
your_pizza.toppings.remove(pepperoni, mushroom) 分享名稱:創(chuàng)新互聯(lián)Django4.0教程:Django4.0 數(shù)據(jù)庫訪問優(yōu)化-使用批量方法
網(wǎng)頁網(wǎng)址:http://m.fisionsoft.com.cn/article/djjhsie.html


咨詢
建站咨詢
