django中bulk_create返回id的三种实现

导读:本篇文章讲解 django中bulk_create返回id的三种实现,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Django中的QuerySet有bulk_create方法,但是此方法不会如预期的一样返回新增的所有对象的id,这个特性相当令人头疼,不过Postgre SQL在Django1.10后已经可以返回id了,MySQL还是不行

所以 我们只能自己实现返回的ids
一,

category_ids = Category.objects.values_list('id', flat=True)
categories = Category.objects.bulk_create([
    Category(title="title1", user=user, created_at=now),
    Category(title="title2", user=user, created_at=now),
    Category(title="title3", user=user, created_at=now),
])
new_categories_ids = Category.objects.exclude(id__in=category_ids).values_list('id', flat=True)

如果查询集非常庞大,这可能会有点耗时。

二,
如果模型有一个created_at字段

now = datetime.datetime.now()
categories = Category.objects.bulk_create([
    Category(title="title1", user=user, created_at=now),
    Category(title="title2", user=user, created_at=now),
    Category(title="title3", user=user, created_at=now),
])

new_cats = Category.objects.filter(created_at >= now).values_list('id', flat=True)

三,
添加一个名为bulk_ref的新列,您将在其中填充一个唯一值并为每一行插入。然后,只需简单地查询事先设置了bulk_ref的表,就可以检索您插入的记录。

cars = [Car(
    model="Ford",
    color="Blue",
    price="5000",
    bulk_ref=5,
),Car(
    model="Honda",
    color="Silver",
    price="6000",
    bulk_ref=5,
)]
Car.objects.bulk_create(cars)
qs = Car.objects.filter(bulk_ref=5)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/48892.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!