新聞中心
使用批量方法來(lái)減少SQL語(yǔ)句

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站與策劃設(shè)計(jì),松陽(yáng)網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:松陽(yáng)等地區(qū)。松陽(yáng)做網(wǎng)站價(jià)格咨詢:18980820575
批量創(chuàng)建
當(dāng)創(chuàng)建對(duì)象時(shí),盡可能使用 ?bulk_create()? 方法來(lái)減少 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')批量更新
當(dāng)更新對(duì)象時(shí),盡可能使用 ?bulk_update()? 方法來(lái)減少 SQL 查詢數(shù)。給定對(duì)象的列表或查詢集:
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()批量插入
當(dāng)插入對(duì)象到 ?ManyToManyFields?時(shí),使用帶有多個(gè)對(duì)象的 ?add()? 來(lái)減少 SQL 查詢的數(shù)量。舉例:
my_band.members.add(me, my_friend)要優(yōu)于:
my_band.members.add(me)
my_band.members.add(my_friend)其中 ?Bands?和 ?Artists?有多對(duì)多關(guān)系。
當(dāng)不同的對(duì)象對(duì)插入到 ?ManyToManyField?或者自定義的 ?through?表被定義時(shí),可以使用 ?bulk_create()? 方法來(lái)減少 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)批量刪除
當(dāng)從 ?ManyToManyFields?刪除對(duì)象時(shí),可以使用帶有多個(gè)對(duì)象的 ?remove()? 來(lái)減少 SQL 查詢的數(shù)量。比如:
my_band.members.remove(me, my_friend)要優(yōu)于:
my_band.members.remove(me)
my_band.members.remove(my_friend)其中 ?Bands?和 ?Artists?有多對(duì)多關(guān)系。
當(dāng)從 ?ManyToManyFields?里刪除不同的對(duì)象對(duì)時(shí),可以在帶有多種 ?through?模型實(shí)例的 ?Q?表達(dá)式上使用 ?delete()? 來(lái)減少 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) 網(wǎng)站標(biāo)題:創(chuàng)新互聯(lián)Django4.0教程:Django4.0 數(shù)據(jù)庫(kù)訪問(wèn)優(yōu)化-使用批量方法
分享網(wǎng)址:http://m.5511xx.com/article/djjhsie.html


咨詢
建站咨詢
