django数据库不存在就插入存在就修改
django数据库不存在就插入存在就修改
需求
django插入数据到数据库时,需要根据条件判断,如果不存在,就插入一条新数据,如果已经存在,则修改数据的字段
解决办法
函数
使用该函数可以完成上述功能
模型.objects.update_or_create()
例如Student.objects.update_or_create
参数
defaults 表示如果存在,要更新的字段名称和对应的新的字段值
**kwargs 表示要查询的条件
- 必填,不然查询条件为空,则返回的是所有数据,会抛出异常
- 查询条件必须匹配0条或1唯条数据,0条则插入,1条则修改,否则抛异常
返回值
返回两个值,第一个是查询的条件,第二个表示是否为插入,False表示不是插入,而是修改数据,True是插入数据
例子
功能
根据student_id判断,如果存在student_id="10088"的学生,则修改学生的姓名为"存在就改名",同时修改学生的性别为0
原始的数据
代码
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tutorial.settings')
import django
django.setup()
from student_manager.models import Student
def main():
# student_id
# student_name
# student_sex
# student_birthday
defaults = {"student_name": "存在就改名", "student_sex": 0}
ret = Student.objects.update_or_create(defaults, student_id="10088")
print(f"ret:{ret}")
if __name__ == '__main__':
main()
运行后输出
第一个返回值为查询Student对象,第二个返回值表示不是插入数据,而是更新数据
运行后的数据
可以看到,10088学生存在,因此名字和性别都被改变了,同时updated自动也自动更新了
例子2
功能
根据student_id判断,如果不存在student_id="123456"的学生,则添加一条记录
原始的数据
代码
import datetime
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tutorial.settings')
import django
django.setup()
from student_manager.models import Student
def main():
# student_id
# student_name
# student_sex
# student_birthday
defaults = {"student_name": "存在就改名", "student_sex": 0, "student_birthday": datetime.datetime.now()}
ret = Student.objects.update_or_create(defaults, student_id="123456")
print(f"ret:{ret}")
if __name__ == '__main__':
main()
运行后输出
返回True表示插入数据
运行后数据
可以看到,即使defaults没有student_id,也会自动填充student_id
PS:如果defaults有student_id,则用defaults里面的student_id
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示