目录
数据查找,单表查询>>> 详见: 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()
当一个表中已经存在记录时, 想要增加一个字段需要以下方式
方式一: 终端中根据提示添加默认值
- 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')
对于数量级比较大的数据有专门的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)的方法批量创建, 这样效率提高很多.