django 的 ORM 操作

一、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、改

在这里插入图片描述
在这里插入图片描述

4、删

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值