ORM 单表记录与字段操作

目录

增加数据

修改数据

删除数据

记录中字段的操作

1. 添加字段

修改字段

删除字段

ORM 批量插入数据


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

增加数据

已注册一个用户为例

核心代码

方式一

# 去数据库中增加数据
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()方法, 保存到数据库中'

修改数据

方式一

先获取记录的对象

在调用update()方法

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

# 先筛选, 获取记录对象
user_obj = models.USer.objects.filter(username='frank')

user_obj.update(password='333')


# 也可以直接修改所有的对象

rows= models.User.objects.all().update(password='333'_
print(rows)

'会返回影响的记录条数'

 方式二:

先获取记录的对象

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

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

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

删除数据

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

记录中字段的操作

1. 添加字段

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

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

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

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

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

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

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

class USer(models.Model):
    id = models.AutoField(primary_key=True)
    username = models.ChariField(max_length=32)
    password = models.IntegerField()
    age = models.IntegerField()

# 添加新的字段
    info = models.CharField(max_length+255,null=True)
    hobby = models.CharFielf(max_length=32,default='tennis')

修改字段

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

class User(models.Model):
    id = models.AuthField(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')

删除字段

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

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)的方法批量创建, 这样效率提高很多.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值