Django 新增数据两种姿势:先 new 再 save,还是一步到位 create?
【摘要】 《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)