django 中 models 的增删改查
一、mysql 数据库的配置
# 登录数据库,创建数据库 jinqun
create database jinqun default charset = utf8;
import pymysql
pymysql.install_as_MySQLdb()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'jinqun',
'HOST': '127.0.0.1',
'USER': 'root',
'PASSWORD': '***************',
'PORT': '3306'
}
}
二、创建项目
# 创建 app
python manage.py startapp test_model
settings.py
INSTALLED_APPS = [
.....
''test_model'',
]
models.py
from django.db import models
from django.contrib.auth.models import User
class Student(models.Model):
STATUS_CHOICES = (
('male', '男'),
('female', '女')
)
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=8, verbose_name='姓名', editable=True)
sex = models.CharField(max_length=8, verbose_name='性别', choices=STATUS_CHOICES, default='male')
heigth = models.CharField(max_length=255, verbose_name='身高', editable=True, blank=True, null=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, editable=False, blank=True, null=True, verbose_name='负责老师')
class Meta:
verbose_name = '学生管理'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
python manage.py makemigrations
python manage.py migrate
三、增删改查操作
python manage.py shell
from test_model.models import Student
from django.contrib.auth.models import User
teacher1 = User.objects.get(id=1)
teacher2 = User.objects.get(id=2)
1、增
# 方法一
Student.objects.create(name='张四', heigth='172cm', user=teacher1)
# 方法二:最后需要用 save() 保存
lisi = Student(name='李四', heigth='166cm', user=teacher2)
lisi.save()
# 方法三:最后需要用 save() 保存
liwu = Student()
liwu.name = '李五'
liwu.heigth = '177cm'
liwu.sex = 'female'
liwu.user = teacher1
liwu.save()
2、查
all()
# all() 查询所有数据
Student.objects.all()
filter()、get()、exclude()
# filter(**kwargs) 根据条件过滤
Student.objects.filter(user__id=2)
Student.objects.filter(name='张三')
# get(**kwargs) 返回的结果只能是一个,多或者少都会报错,拿到的是一个 model 对象, 区别于 filter
Student.objects.get(id=5)
# exclude(**kwargs) 获取筛选之外的对象
Student.objects.exclude(user__id=2) # 获取的是,外键 User 的 id 不为 2 的所有 model 对象
values()、values_list ()
# values(*field) 一个特殊 QuerySet,里面是字典
Student.objects.values()
Student.objects.values('id', 'name', 'heigth')
# values_list(*field) 一个特殊 QuerySet,里面是元组
Student.objects.values_list()
Student.objects.values_list('id', 'name')
order_by()、reverse()、distinct() 、count()、first() 、last() 、exists()
# order_by(*field) 排序
Student.objects.filter(user__id=2).order_by('name')
# reverse() 反向
Student.objects.filter(user__id=2).order_by('name').reverse()
# distinct() 去重
Student.objects.all().distinct()
# count() 返回数量
Student.objects.filter(user__id=2).count()
# first() 返回第一条数据
Student.objects.first()
# last() 返回最后一条数据
Student.objects.last()
# exists() 返回的结果存在则 True,不存在则 False
Student.objects.filter(id=5).exists() # True
Student.objects.filter(id=14).exists() # False
单表,双下划线查询
# lt 小于
Student.objects.filter(id__lt = 3)
# gt 大于
Student.objects.filter(id__gt = 6)
Student.objects.filter(id__gt = 3, id__lt = 6)
# in
Student.objects.filter(id__in=[3, 5, 6])
Student.objects.exclude(id__in=[3, 5, 6])
# range 范围
<QuerySet [<Student: 张三>, <Student: 张四>, <Student: 张四>]>
# 包含
Student.objects.filter(name__contains='一')
# 以某某开头
Student.objects.filter(name__startswith='王')
Student.objects.filter(heigth__istartswith='16')
# 以某某结尾
Student.objects.filter(name__endswith='三')
Student.objects.filter(user__id__iendswith=2)
__contains 包含
__icontains 忽略大小写包含
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 在一个 list 范围
__startswith 以 ... 开头
__istartswith 忽略大小写,以 ... 开头
__endswith 以 ... 结尾
__iendswith 忽略大小写,以 ... 结尾
__range 在 ... 范围
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False 是否为空
3、改