- 一、记录操作
- 1.1 对数据的查找
- 单表查询
- 1.2 增加数据
- 1.3 修改数据
- 1.4 删除数据
- 二、 记录中字段的操作
- 2.1 添加字段
- 方式一:终端中根据提示添加默认值
- 方式二:在`models.py`中给字段直接添加默认值
- 2.2 修改字段
- 2.3 删除字段
- 三、ORM 批量插入数据
详情查看-----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()
1.3 修改数据该方法是通过类实例化获得一个对象,然后调用内置的save()方法,保存到数据库中
方式一:
先获取记录的对象;
再调用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)的方法批量创建,这样创建效率很高



