• ORM 单表记录与字段操作


    目录

    增加数据

    修改数据

    删除数据

    记录中字段的操作

    1. 添加字段

    修改字段

    删除字段

    ORM 批量插入数据


    数据查找,单表查询>>> 详见: Django-ORM 单表查询_Yietong309的博客-CSDN博客

    增加数据

    已注册一个用户为例

    核心代码

    方式一

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

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

    方式二:

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

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

    修改数据

    方式一

    先获取记录的对象

    在调用update()方法

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

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

     方式二:

    先获取记录的对象

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

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

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

    删除数据

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

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

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

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

    记录中字段的操作

    1. 添加字段

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

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

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

    执行数据库迁移名利 python3 manage.py makemigrations

    选择1 , 然后再输入默认值, 再执行python3 manage.py migrate

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

    可以黑心的字段设置成空, 或者直接添加默认值\

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

    修改字段

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

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

    删除字段

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

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

    ORM 批量插入数据

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

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

    例如:

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

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

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

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

  • 相关阅读:
    Github 2024-04-03 C开源项目日报 Top10
    GO环境及入门案例
    恒运资本:煤炭、石油板块拉升,安泰集团一度涨停,中曼石油等走高
    拆解qlib的dataset,使用代码方式加载数据集
    小程序需要做等保测评吗?
    Linux内核分析(八)--用户/内核缓冲区及磁盘高速缓存
    时序预测 | Pytorch实现TCN-Transformer的时间序列预测
    Java 基础面试300题 (201-230)
    Spring 源码(8)Spring BeanPostProcessor的注册、国际化及事件发布机制
    [回文串][贪心]leetcode6166:最大回文数字(medium)
  • 原文地址:https://blog.csdn.net/weixin_67531112/article/details/126713637