首页 > 数据库 >django数据库不存在就插入存在就修改

django数据库不存在就插入存在就修改

时间:2023-07-31 15:17:09浏览次数:44  
标签:__ 存在 defaults 数据库 django 插入 student id

django数据库不存在就插入存在就修改

需求

django插入数据到数据库时,需要根据条件判断,如果不存在,就插入一条新数据,如果已经存在,则修改数据的字段

解决办法

函数

使用该函数可以完成上述功能

模型.objects.update_or_create()例如Student.objects.update_or_create

参数

image-20230731143820895

defaults 表示如果存在,要更新的字段名称和对应的新的字段值

**kwargs 表示要查询的条件

  • 必填,不然查询条件为空,则返回的是所有数据,会抛出异常
  • 查询条件必须匹配0条或1唯条数据,0条则插入,1条则修改,否则抛异常

返回值

返回两个值,第一个是查询的条件,第二个表示是否为插入,False表示不是插入,而是修改数据,True是插入数据

例子

功能

根据student_id判断,如果存在student_id="10088"的学生,则修改学生的姓名为"存在就改名",同时修改学生的性别为0

原始的数据

image-20230731143236731

代码

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()

运行后输出

image-20230731143540237

第一个返回值为查询Student对象,第二个返回值表示不是插入数据,而是更新数据

运行后的数据

image-20230731143616208

可以看到,10088学生存在,因此名字和性别都被改变了,同时updated自动也自动更新了

例子2

功能

根据student_id判断,如果不存在student_id="123456"的学生,则添加一条记录

原始的数据

image-20230731144907080

代码

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()

运行后输出

image-20230731144655251

返回True表示插入数据

运行后数据

image-20230731144930548

可以看到,即使defaults没有student_id,也会自动填充student_id

PS:如果defaults有student_id,则用defaults里面的student_id

标签:__,存在,defaults,数据库,django,插入,student,id
From: https://www.cnblogs.com/rainbow-tan/p/17593445.html

相关文章

  • url函数的使用,无名分组和有名分组,反向解析,django2中5种转换器,路由分发,伪静态的概
    url函数的使用(支持正则表达式)#django1中使用的是urlurl('test',views.test),url函数的第一个参数是支持正则表达式的如果匹配到一个路由,就不在往下匹配,直接执行路由对应的视图函数#http://127.0.0.1:8000/test/是django默认设置的,django会先拿着test去匹配,如果匹配不......
  • .NET下数据库的负载均衡“经典方案”(大项目必备,建议收藏)
    【前言】本文讲述的“数据库负载均衡”方案,为市面上最经典(没有之一),由.NET界骨灰级大佬推出。采用该技术方案的大公司,一年省下了几个亿的支出。 【正文】支持.NetCore(2.0及以上) 与.NetFramework(4.5及以上)可以部署在Docker,Windows,Linux,Mac。为了演示数据库的负载......
  • mongodb电商数据库设计
    MongoDB电商数据库设计概述在电商平台的数据库设计中,使用MongoDB作为数据库管理系统是一种常见的选择。MongoDB是一种具有高度可伸缩性和灵活性的NoSQL数据库,适用于存储大量的非结构化或半结构化数据。本文将介绍如何使用MongoDB来设计电商数据库,并指导刚入行的开发者完成这个任......
  • mysql 创建数据库 utf8mb3 utf8mb4
    mysql创建数据库utf8mb3utf8mb4在MySQL中,字符集是指字符的编码方式,决定了数据库中能够存储和处理的字符集合。MySQL支持多种字符集,其中包括UTF-8字符集,用于存储和处理全球各种语言的文本。在MySQL5.5.3之前,MySQL默认使用UTF-8字符集的变体utf8,该字符集最多只能存储3字节的UTF......
  • mysql开源数据库安全吗
    MySQL开源数据库安全实现流程作为一名经验丰富的开发者,我将向你详细介绍如何实现MySQL开源数据库的安全性。下面是整个过程的步骤总结:步骤操作1安装并配置MySQL数据库2设置数据库用户和权限3加密数据库连接4定期备份数据库5更新和维护数据库软件6......
  • 【补充】Django配置文件中的参数的作用
    Settings.py中的配置的作用【1】路径相关#pathlib:3.8+以后的模块,跟路径相关frompathlibimportPath#(1)项目根目录路径BASE_DIR=Path(__file__).resolve().parent.parent上述内容是在Django项目配置文件中使用pathlib模块设置项目根目录路径的操作。在Python......
  • 【补充】Django中的翻译函数
    【补充】Django中的翻译函数#只要做了国际化,会自动翻译成,当前国家的语言fromdjango.utils.translationimportgettext_lazyas_#使用方法_是一个函数,函数调用,可以将参数翻译成其他语言_('hello')django.utils.translation:这是Django框架提供的翻译模块,用于处理多......
  • 数据库之oracle查询、序列、建表
    1.查询emp表薪水降序排序后的第5-9条数据 2.创建序列 3.建表toys,调用序列的nextval方法实现id自增。添加数据 ......
  • 数据库之Oracle简介
    ORCL单仓库,多用户sys是超级管理员,主要用来维护系统信息和管理实例。不知密码也可以本机登录(远程需要),只能使用SYSDBA或SYSOPER角色登录 system是系统管理员,拥有DBA权限,通常用来管理oracle数据库的用户、权限和存储等。只能用NORMAL方式登录。需要oracle安装时的密码才能登录,......
  • 数据库行存储索引与列存储索引
          行存储是在逻辑上整理为包含行和列的表,实际上以行式数据格式存储的数据,此格式是存储关系表数据的传统方法。列存储是在逻辑上整理为包含行和列的表,实际上以列式数据格式存储的数据。   行存储索引最适合用于查找数据、搜索特定值的查询,或者针对较小范围的值......