目录
数据查找,单表查询>>> 详见: 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)的方法批量创建, 这样效率提高很多.