Django 新增数据两种姿势:先 new 再 save,还是一步到位 create?

举报
周杰伦本人 发表于 2025/08/31 20:05:32 2025/08/31
【摘要】 《Django 新增数据两种姿势:先 new 再 save,还是一步到位 create?》小明第一次往 Django 数据库里插一条书,写了两种代码:方式 A:先实例化,再手动保存b = BookInfo(name='天龙八部', pub_date='1963-01-01', read_count=0, comment_cnt=0)b.save()方式 B:一步到位BookInfo.obj...

《Django 新增数据两种姿势:先 new 再 save,还是一步到位 create?》

小明第一次往 Django 数据库里插一条书,写了两种代码:

方式 A:先实例化,再手动保存

b = BookInfo(name='天龙八部', pub_date='1963-01-01', read_count=0, comment_cnt=0)
b.save()

方式 B:一步到位

BookInfo.objects.create(name='倚天屠龙记', pub_date='1961-01-01', read_count=0, comment_cnt=0)

两条语句都成功,但小明依然犯嘀咕:

到底哪条才是“官方推荐”?有没有性能差异?为什么方式 A 还要多写一行 save()

下面用 3 个场景把两种写法彻底讲透。


场景 1:只想插一条简单记录

  • 推荐写法create()
    一行解决,内部自动 save(),无需再敲回车。
BookInfo.objects.create(name='鹿鼎记', pub_date='1969-01-01')

场景 2:要先填默认值、再修改、再保存

  • 推荐写法:先实例化,再手动 save()
    你可以在 save() 前随意改字段,甚至做校验。
b = BookInfo()          # 空对象
b.name = '笑傲江湖'
b.read_count = 100      # 先设为 100
if b.read_count > 50:   # 业务校验
   b.read_count = 50
b.save()

场景 3:批量插入 1000 条

  • 推荐写法bulk_create(),一次性提交,比循环 create() 快 10 倍。
books = [
   BookInfo(name=f'书{i}', pub_date='2000-01-01')
   for i in range(1000)
]
BookInfo.objects.bulk_create(books)

一句话总结

场景 用哪种写法 原因
快速插入一条 create() 最简洁
插入前需要额外逻辑 先实例化再 save() 可随意改字段
批量插入 bulk_create() 性能最佳

所以,别纠结“哪种官方”,按场景选写法即可。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。