13.django(单表操作:增简单查询删改补天字段问题)

muyangxiaodong muyangxiaodong     2022-12-14     212

关键词:

单表操作—增

  • 再次明确orm与mysql的对应关系

    orm                      mysql
    类                       表
    类中的属性                 表的字段
    实例化对象                 行记录(一行数据)
  • 方式1(不常用)

    def create(request):
    stu_obj = models.Student(
    name = ‘牧羊小董‘,
    age=21
    ) # 实例化一个对象
    stu_obj.save() # 将和这个数据添加到数据库中
      return HttpResponse("<h1>添加数据成功</h1>")
       
    操作代码都是写道views相应的函数里面的,一下只写操作代码,位置都是一样的
  • 方式2(常用)

    models.Student.objects   # objects可以称为一个控制器,这个控制器可以调用增删改查等其他方法,非常重要
    ?
    stu_obj = models.Student.objects.create(
    name=‘牧羊小董‘,
    age=21
    )
    print(stu_obj) # Student object
    # 通过万能的点获取它的属性
    print(stu_obj.id) # 这条数据当前的id值
    print(stu_obj.name) # 牧羊小董
    print(stu_obj.age) # 21

    重要的点:以后我们对类实例化的对象比如上面的stu_obj,我们都称之为models对象

  • 方式3(批量创建)

    现在有200条行数据,我想将在这200条行数据插入到对应的表中,首先想到的就是for循环,循环插入。循环插入,你插入一次,就是与数据库交互一次,就会产生一次IO,这样循环插入的数据量越大,IO越多,效率越低。

    # 批量创建
    list1 = [models.Student(name=f‘牧羊小董i‘, age=21 + i) for i in range(20)]
    obj = models.Student.objects.bulk_create(list1)
    print(obj)
    ?
    """
    打印的obj结果是:
    [<Student: Student object>, <Student: Student object>, <Student: Student object>,
    ...
    <Student: Student object>, <Student: Student object>, <Student: Student object>]
    """
  • 方式4(创建更新)

    有则更新,无则添加

    # 有的
    models.Student.objects.update_or_create(
    name =‘牧羊小董0‘,   # 筛选判断条件
    defaults=
    ‘age‘: 18,

    )
    ?
    ?
    # 没有的
    models.Student.objects.update_or_create(
    name=‘小计‘,
    defaults=
    ‘age‘: 17,

    )

 

单表操作— 简单查询

  • 查询所有 all()

    def all(request):
      query_set = models.Student.objects.all()
      print(query_set) # 返回一个QuerySet对象
      print(query_set[1:5]) # 可以使用切片
      for obj in query_set:
    print(obj.name)   # 遍历QuerySet对象,通过点获取里面每个models对象的name属性
      return HttpResponse("<h1>数据查询完毕</h1>")
    ?
    ?
    # 测试__str__功能
    class Student(models.Model):
      id = models.AutoField(primary_key=True)
      name = models.CharField(max_length=16)
      age = models.IntegerField()
    ?
      def __str__(self):
          return self.name
    ?
    def all(request):
      query_set = models.Student.objects.all()
      for obj in query_set:
          print(obj)   # 遍历QuerySet对象,现在就直接打印name属性了
      return HttpResponse("<h1>数据查询完毕</h1>")
    ?
    操作代码都是写道views相应的函数里面的,一下只写操作代码,位置都是一样的

    另一个非常重要的对象:QuerSet对象,他是一个类似于列表的容器,可迭代的,里面的元素就是一个个的models对象。

  • 按条件查询 filter ()

    models.类名.objects.filter(条件) 返回的是QuerySet对象

    query_set = models.Student.objects.filter(age=18)
    print(query_set)
    ?
    # 无论查询的结果是一个还是多个,都是返回QuerySet对象
  • 按条件查找 get()

    返回的都是models对象

    get() 按条件查找,返回一个models对象,通过get查询的结果有且只能有一个

    面试考过报错原因以及分析

    obj = models.Student.objects.get(id=2)
    print(obj)   # 依照条件查询结果只有一个不报错
    ?
    obj = models.Student.objects.get(age=20)
    print(obj)   # 依照条件查询结果可能是多个就会报错
    报错:get() returned more than one Student -- it returned [这里是查询到的总数量]!
    ?
    obj = models.Student.objects.get(id=2000)
    print(obj)   # 依照条件查询结果可能没有对应结果也会报错
    报错:Student matching query does not exist.

 

单表操作—删

分为两种情况的删除 一个是QuerySet、一个是models

  • QuerySet对象

    def del_(request):
        models.Student.objects.filter(age=20).delete()
        return HttpResponse("<h1>数据删除完毕</h1>")
  • models对象

    def del_(request):
        models.Student.objects.get(id=2).delete()
        return HttpResponse("<h1>数据删除完毕</h1>")
  • 表中数据全部删除

    def del_(request):
        models.Student.objects.all().delete()
        return HttpResponse("<h1>数据删除完毕</h1>")

 

单表操作—改

  • 方式1(update_or_create)

    models.Student.objects.update_or_create(
    	name =‘牧羊小董0‘,   # 筛选判断条件
    	defaults=
    		‘age‘: 18,
    	
    )
  • 方式2(update)

    models.Student.objects.filter(id=1).update(name=‘牧羊小董‘)

 

补充字段

坑:给已经创建好并有数据的表添加新字段的问题

我们已经创建好一个Student表了,并且也往里面插入了一些数据,此时我们要想给Student表添加一个新的字段,比如sex字段,怎么做?

先在models.py里面的Student类里面写上sex字段

class Student(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=16)
    age = models.IntegerField()
    sex = models.CharField(max_length=6)

    def __str__(self):
        return self.name

然后你在Terminal里面输入命令:

python manage.py makemigrations

然后显示下面的结果:

技术图片

 

 

技术图片

原因:原表已经存在数据了,你想新增字段,那么原表的这些数据对应的这个字段的内容是什么?

你也没有设置这个字段默认为null,所以产生了歧义。

解决方式:

1、选择1:退出,咱们去对sex字段设置一个默认值。

sex = models.CharField(max_length=6, default=‘male‘)

2、选择2:退出。咱们去对sex字段设置一个参数:null=True

sex = models.CharField(max_length=6, null=True)

3、删除表重新构建表结构

然后重新打开Terminal,输入命令:

python manage.py makemigrations
python manage.py migrate

 

mybatis实现单表增删改查操作

mybatis是对持久层进行了封装、mybatis文档地址:https://mybatis.org/mybatis-3/zh/index.html下面实现单表的增删改查操作。1.新建maven项目命名为mybatis、并在pom.xml中引入相关依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.ap 查看详情

orm单表操作查询多表操作查询及增删改查(代码片段)

------------------------------------------只有对前途乐观的人,才能不怕黑暗,才能有力量去创造光明。乐观不是目的,而是人生旅途中的一种态度。 多表操作创建模型实例:我们来假定下面这些概念,字段和关系作者模型:一个作... 查看详情

django学习第6篇:django之orm单表操作(增删改查)(代码片段)

django之数据库表的单表查询一、添加表记录对于单表有两种方式#添加数据的两种方式#方式一:实例化对象就是一条表记录Frank_obj=models.Student(name="海东",course="python",birth="2000-9-9",fenshu=80)Frank_obj.save()#方式二:models.Student.objects.creat... 查看详情

数据库的增删改单表查询(代码片段)

  数据库的增删改             插入数据INSERT  更新数据UPDATE  删除数据DELETE插入数据INSERT1.插入完整数据(顺序插入)语法一:INSERTINTO表名(字段1,字段2,字段3...字段n)VA... 查看详情

django学习第6篇:django之orm单表操作(增删改查)(代码片段)

django之数据库表的单表查询一、添加表记录对于单表有两种方式#添加数据的两种方式#方式一:实例化对象就是一条表记录Frank_obj=models.Student(name="海东",course="python",birth="2000-9-9",fenshu=80)Frank_obj.save()#方式二:models.Student.objects.creat... 查看详情

mybatis单表的增删改查(代码片段)

...:国学周更-心性养成之路🥭本文内容:MyBatis单表的增删改查本文目录结果映射ResultMap使用selectOne方法查询单条记录使用insert方法添加记录 主键非自增长 主键值由数据库自增长使用delete方法删除记录使用update方法... 查看详情

60django项目单表(出版社)的增删改查

主要内容:1.常用的orm查询语句  查询: 类名.objects.all()                    #查询全部,返回一个列表     类名.objects.filter() 查看详情

oracle表的crud(增删改查)单表

...e=90whereSno=‘9521105’;有关于查找查询可以分为三种类型:单表查询,多表查询和子查询这里主要讲的是单表查询select属性1,属性2,…from表名[where检索条件][orderby排序依据列][groupby分组依据列][having组提取条件]1单表查询纵向查... 查看详情

浅谈增删改查的意义

...非就是一个界面上数据的增删改查,它可能就是针对一张单表的操作,了不起就是对几张表的增删改,soeasy!最近是越发感受到:信息管理系统的精髓,除了数据库设计外,就是“无比简单&rdq 查看详情

django---进阶5(代码片段)

...)联表查询(基于双下划线的跨表查询)周末作业单表操作#django自带的sqlite3数据库对日期格式不是很敏感处理的时候容易出错#增#res=models.User.objects.create(name=‘jason‘,age=18,re 查看详情

orm对单表的增删改查

表记录的增加:1)b=Book(name=‘python‘,price=99) b.save()2)Book.objects.create(name=‘python‘,price=99) https://www.cnblogs.com/tangjianyu/p/8018745.html 查看详情

1.完整语段的增删改2.单表查询3.多表查询

增语法‘‘‘1.所有数据按顺序插入insert[into]表名values(值1,...,值n)[,...,(值1,...,值n)];2.指定字段匹配插入,可以任意顺序insert[into]表名(字段2,字段1,...,字段n)values(值2,值1,...,值n)[,...,(值2,值1,...,值n)];3.插入查询结果insert[into]表1(字段1,... 查看详情

mybatis单表常用增删改查

1.编写sql表,插入原始数据1--删除表2DROPTABLEtestA;3--创建表4CREATETABLEtestA(5idINTAUTO_INCREMENTPRIMARYKEY,6usernameVARCHAR(50),7date1DATETIME,8str_dateVARCHAR(50),9date_strDATE10)11--插入数据12INSERTINTOtestA(username, 查看详情

linq创建连接简单增删改查

...它允许编写C#或者VisualBasic代码以查询数据库相同的方式操作内存数据。全名:LinQtosql类:集成化的数据访问类。会自动生成,进行数据库数据访问。LinQ的创建:1、链接数据库:添加--添加新项--找到LINQtoSQL类--名字就叫数据库的... 查看详情

简单的表内容的增删改操作

表内容的增加操作:insertintostudentvalues(‘1‘,‘小明‘)表内容的修改操作:updatestudentsetsname=‘djdjdj‘wheresno=‘1‘表内容的删除操作:deletefromstudentwheresno=‘1‘ 查看详情

orm的单表增删改查

一、与数据库的映射关系         类名<------->表名        属性<------->字段属性的约束<------->字段的类型  实例对象... 查看详情

django之单表的增删改查(代码片段)

  books/urls.py"""booksURLConfigurationThe`urlpatterns`listroutesURLstoviews.Formoreinformationpleasesee:https://docs.djangoproject.com/en/1.11/topics/http/urls/Examples:Functionviews1.Addan 查看详情

hibernate--单表的增删改查

语法:如果利用Hibernate修改数据库时,需要使用事务处理,一个事务提交时才真正将修改过的记录更新到数据库中。1、增加记录Sessionsession=HibernateSessionFactory.getSession();Transactiontran=session.beginTransaction();//定义事... 查看详情