使用批量方法来减少SQL语句
创新互联是一家专注于成都网站设计、做网站与策划设计,松阳网站建设哪家好?创新互联做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:松阳等地区。松阳做网站价格咨询:18980820575
当创建对象时,尽可能使用 bulk_create()
方法来减少 SQL 查询数量。比如:
Entry.objects.bulk_create([
Entry(headline='This is a test'),
Entry(headline='This is only a test'),
])
要优于:
Entry.objects.create(headline='This is a test')
Entry.objects.create(headline='This is only a test')
当更新对象时,尽可能使用 bulk_update()
方法来减少 SQL 查询数。给定对象的列表或查询集:
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'])
要优于:
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 查询的数量。举例:
my_band.members.add(me, my_friend)
要优于:
my_band.members.add(me)
my_band.members.add(my_friend)
其中 Bands
和 Artists
有多对多关系。
当不同的对象对插入到 ManyToManyField
或者自定义的 through
表被定义时,可以使用 bulk_create()
方法来减少 SQL 查询的数量。比如:
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)
要优于:
my_pizza.toppings.add(pepperoni)
your_pizza.toppings.add(pepperoni, mushroom)
当从 ManyToManyFields
删除对象时,可以使用带有多个对象的 remove()
来减少 SQL 查询的数量。比如:
my_band.members.remove(me, my_friend)
要优于:
my_band.members.remove(me)
my_band.members.remove(my_friend)
其中 Bands
和 Artists
有多对多关系。
当从 ManyToManyFields
里删除不同的对象对时,可以在带有多种 through
模型实例的 Q
表达式上使用 delete()
来减少 SQL 查询的数量。比如:
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()
要优于:
my_pizza.toppings.remove(pepperoni)
your_pizza.toppings.remove(pepperoni, mushroom)
本文题目:创新互联Django4.0教程:Django4.0 数据库访问优化-使用批量方法
文章源于:http://www.csdahua.cn/qtweb/news26/521226.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网