• Django-ORM 单表记录与字段操作


    一、记录操作

    1.1 对数据的查找

    单表查询

    详情查看-----ORM 单表查询


     

    1.2 增加数据

    以注册一个用户为例

    核心代码

    方式一:

    # 去数据库中增加数据
    from app01 import models
    res = models.User.objects.create(username=user_name,password=pwd)
    # models.User.objects.create(**{......})
    
    • 1
    • 2
    • 3
    • 4

    models.User.objects.filter(username=user_name)匹配成功的返回值是一个对象,该对象就是该条记录`

    方式二:

    res = models.User(username=user_name,password=pwd)
    res.save()
    
    • 1
    • 2

    该方法是通过类实例化获得一个对象,然后调用内置的save()方法,保存到数据库中

    1.3 修改数据

    方式一:

    先获取记录的对象;

    再调用update()方法

    只修改括号内的参数,其他参数并不会重新复制一遍

    # 先筛选,获取记录对象
    user_obj = models.User.objects.filter(username='frank')
    
    user_obj.update(password='3333')
    
    # 也可以直接修改所有的对象
    
    rows=models.User.objects.all().update(password='3333')
    print(rows)
    '会返回影响的记录条数'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    方式二:

    先获取记录的对象;

    然后用操作对象的方式修改对象的属性,即修改了字段对应的值

    最后,再调用save()方法,但是该方法会将其他没有修改的数据,再保存一次

    # 先筛选,获取记录对象
    user_obj = models.User.objects.filter(username='frank')
    # 修改对象属性
    user_obj.password='3333'
    # 保存对象
    user_obj.save()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.4 删除数据

    每个 QuerySet下也都有一个 delete() 方法,它一次性删除 QuerySet 中所有的对象(如果QuerySet对象中只有一个记录对象,那也就只删一条)

    # 先筛选,获取记录对象
    user_obj = models.User.objects.filter(username='frank')
    # 再删除记录对象
    user_obj.delete()
    
    # 删除所有
    models.User.objects.all().delete()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    同样可以调用每一个对象的delete()方法,单独删除某个对象

    obj = models.User.objects.filter(username='frank').first()
    obj.delete()
    
    • 1
    • 2

     

    二、 记录中字段的操作

    2.1 添加字段

    当一个表中已经存在记录时,想要增加一个字段需要以下方式

     

    方式一:终端中根据提示添加默认值

    class User(models.Model):
        id = models.AutoField(primary_key=True)
        username = models.CharField(max_length=32)
        password = models.IntegerField()
        
    		# 添加的新字段
        age = models.IntegerField()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    执行数据库迁移命令python3 manage.py makemigrations

    选择 1,然后再输入默认值

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FdKAurFl-1656063983042)(图片.assets/ORM4.png)]

    再执行python3 manage.py migrate

     

     

    方式二:在models.py中给字段直接添加默认值

    可以给新加的字段设置成为空,或者直接添加默认值

    class User(models.Model):
        id = models.AutoField(primary_key=True)
        username = models.CharField(max_length=32)
        password = models.IntegerField()
        age = models.IntegerField()
        
        # 添加的新字段
        info = models.CharField(max_length=255, null=True)
        hobby = models.CharField(max_length=32, default='tennis')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.2 修改字段

    修改字段只需要直接修改字段对应的代码,然后执行数据库迁移命令即可

    class User(models.Model):
        id = models.AutoField(primary_key=True)
        username = models.CharField(max_length=32)
        
        # password = models.IntegerField()
        password = models.CharField(max_length=255, null=True)
        
        age = models.IntegerField()
        info = models.CharField(max_length=255, null=True)
        hobby = models.CharField(max_length=32, default='tennis')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.3 删除字段

    直接将想要删除的字段对应的代码删除或者注释,然后执行数据库迁移命令即可

    class User(models.Model):
        id = models.AutoField(primary_key=True)
        username = models.CharField(max_length=32)
        
        # password = models.IntegerField()
        # password = models.CharField(max_length=255, null=True)
        # age = models.IntegerField()
        # info = models.CharField(max_length=255, null=True)
        # hobby = models.CharField(max_length=32, default='tennis')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    三、ORM 批量插入数据

    对于数量级比较大的数据有专门的方法bulk_create

    普通的create方法对于插入大量数据,效率很低。

    示例:

    from django.shortcuts import render
    from app01 import models
    
    def home(request):
        book_list = []
        for i in range(1,10001):
            book_obj = models.Book(title='第 %s 本书'%i)
            book_list.append(book_obj)
            
        models.Book.objects.bulk_create(book_list)
        return render(...)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    方法bulk_create,需要获得一个可迭代的数据类型,该数据类型中存放等待被创建的数据对象

    数据对象就是根据 models文件中的类实例化获得的对象

    最后通过models.Book.objects.bulk_create(book_list)的方法批量创建,这样创建效率很高

  • 相关阅读:
    seatunnel web ui 构建时报错
    【python基础】文件和异常详解:使用、读取、写入、追加、保存用户的信息,以及优雅的处理异常
    IO模型之I/O多路复用
    神经网络全连接层的作用,各种神经网络的优缺点
    ios基础(二)
    【对比数组相同字段】在单个数组中根据相同字段进行业务操作,双重for循环,去重数组
    初学者必读:如何使用 Nuxt 中间件简化网站开发
    海格里斯HEGERLS托盘式四向穿梭车批发定制|24小时全自动无人化立体仓库批量托盘作业
    Docker部署ELK
    铁路防护网常被剪锁入侵?RFID电子锁保障铁路安全
  • 原文地址:https://blog.csdn.net/weixin_43988680/article/details/125450007