栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录
  • 一、记录操作
    • 1.1 对数据的查找
      • 单表查询
    • 1.2 增加数据
    • 1.3 修改数据
    • 1.4 删除数据
  • 二、 记录中字段的操作
    • 2.1 添加字段
      • 方式一:终端中根据提示添加默认值
      • 方式二:在`models.py`中给字段直接添加默认值
    • 2.2 修改字段
    • 2.3 删除字段
  • 三、ORM 批量插入数据

一、记录操作 1.1 对数据的查找 单表查询

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


 

1.2 增加数据

以注册一个用户为例

核心代码

方式一:

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

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

方式二:

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

该方法是通过类实例化获得一个对象,然后调用内置的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)
'会返回影响的记录条数'

方式二:

先获取记录的对象;

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

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

# 先筛选,获取记录对象
user_obj = models.User.objects.filter(username='frank')
# 修改对象属性
user_obj.password='3333'
# 保存对象
user_obj.save()
1.4 删除数据

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

# 先筛选,获取记录对象
user_obj = models.User.objects.filter(username='frank')
# 再删除记录对象
user_obj.delete()

# 删除所有
models.User.objects.all().delete()

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

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

 

二、 记录中字段的操作 2.1 添加字段

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

 

方式一:终端中根据提示添加默认值
class User(models.Model):
    id = models.AutoField(primary_key=True)
    username = models.CharField(max_length=32)
    password = models.IntegerField()
    
		# 添加的新字段
    age = models.IntegerField()

执行数据库迁移命令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')
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')
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')
三、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(...)

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/990643.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号