python_django—day30(笔记)

本文介绍了如何使用Django ORM进行模型对接,包括增删改查操作,级联数据应用,以及ORM、字段类型和约束的深入解析。还讲解了模型成员objects的使用和创建对象的方法,适合初学者理解数据库操作和Django开发实践。
摘要由CSDN通过智能技术生成

主要内容:

1.model的简单对接,实现数据的增删改查

models使用了ORM技术,对象关系映射,将业务逻辑进行了一个解耦合
在这里插入图片描述

在这里插入图片描述
如何将迁移文件映射到mysql中?
在这里插入图片描述
在这里插入图片描述

(1)增:
向数据库中添加数据:
在这里插入图片描述
获取学生列表里的数据:

def get_student(request):
    students=Student.objects.all()
    for student in students:
        print(student.s_name)

    return HttpResponse('Student List')

(2)查:
将学生的信息显示到网址上:

def get_student(request):
    students=Student.objects.all()
    for student in students:
        print(student.s_name)
    context={
        "students":students
    }

    return render(request,'index.html',context=context)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Student List</title>
</head>
<body>
<h2>CentOS</h2>
<h3>{{students}}</h3>
<h1>Student List</h1>
<ul>
    {%for student in students%}
        <li>{{student.s_name}}</li>
    {%endfor%}
</ul>
</body>
</html>

(3)改:

def update_student(request):
    student=Student.objects.get(pk=2)
    student.s_name='Jack'
    student.save()
    return HttpResponse('Student Update Success')

(4)删:

    student=Student.objects.get(pk=3)
    student.delete()
    return HttpResponse('Student Delete Success')

2.数据常规操作—级联数据

在这里插入图片描述
(1)这样写的好处是支持模板语言
在这里插入图片描述
(2)Django的manage工具提供了shell命令,集成了python环境中的shell终端,帮助我们配置好当前工程的运行环境(如连接好数据库等),以便可以直接在终端中执行测试python语句。
在这里插入图片描述
这种方式没有代码提示,但可以帮助我们调试代码
在这里插入图片描述
(3)如何看待bug:
1)看日志:先看第一条,再看最后一条;
2)梳理思路:程序在哪一个位置和预期出现偏差
(4)级联数据,外键约束
在这里插入图片描述
1)需求:通过学生表获取班级名称:

def get_grade(request):
    student=Student.objects.get(pk=3)
    grade=student.s_grade
    return HttpResponse('Get Grade_Name: %s'%(grade.g_name))

挖坑:

<h2>{{students}}</h2>

2)需求:将班级中所有学生拿出来显示在网页上

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>StudentList</title>
</head>
<body>

<h2>Student_list</h2>
<ul>
    {% for student in students %}
        <li>{{student.s_name}}</li>
    {% endfor %}
</ul>

</body>
</html>
def get_students(request):
    grade=Grade.objects.get(pk=1)
    students=grade.student_set.all()
    context={
        'students':students
    }
    return render(request,'students.html',context=context)

3.ORM&字段类型&约束

(1)ORM:对象关系映射,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换,可以简单理解为翻译机。
(2)字段类型
1)AutoField:一个根据实际ID自动增长的IntegerField,通常不指定。如果指定,一个主键字段将自动添加到模型中;
2)CharField(max_length=字符长度)
字符串,默认的表单样式是TextInput
3)TextField
大文本字段,一般超过4000使用,默认的表单控件是Textarea
4)IntegerFiled
整数
5)DecimalFiled(max_digits=None,decimal_places=None)
使用python的Decimal实例表示的是十进制浮点数
DecimalFiled.max_digits表示位数总数,
DecimalFiled.decimal_places表示小数点后数字位数
6)FloatField
用python的float实例来表示的浮点数
7)BooleanField
true/flase字段,此字段的默认表单控制是CheckboxInput
8)NullBooleanField
支持null,true,flase三种值
9)TimeField
使用python中的datetime.time实例表示的是时间
10)DateTimeField
使用python中的datetime.datetime实例表示的是日期和时间
(3)约束
字段选项:
概述:通过字段选项可以实现对字段的约束,在字段对象时通过关键字指定
1)null:如果为True,Django将空值以null存入到数据库中,默认是False
2)blank:如果为True,则该字段允许为空白,默认是False
注意:null是数据库范畴的概念,blank是表单验证范畴
3)db_column:字段的名称,如果未指定,则使用属性的名称
4)db_index:如果值为True,则在表中会为此字段创建索引
5)default:默认值
6)primary_key:若为True,则该字段会成为模型的主键字段
7)unique:若为True,这个字段在表中必须有唯一值
在这里插入图片描述
在这里插入图片描述

5.模型成员objects

Django默认通过模型的objects对象实现模型数据查询
Django有两种过滤器用于筛选记录:
filter:返回符合筛选条件的数据集
exclude:返回不符合筛选条件的数据集
多个filter和exclude可以连接在一起查询
persons = Person.objects.filter(p_age__gt=30)表示年龄大于30
在这里插入图片描述

persons = Person.objects.filter(p_age__gt=30).filter(p_age__lt=60)b表示年龄大于30小于60在这里插入图片描述
persons = Person.objects.exclude(p_age__lt=50)表示把年龄小于50的踢出去
在这里插入图片描述
persons = Person.objects.exclude(p_age__lt=35).filter(p_age__lt=60)表示年龄大于等于35小于60
在这里插入图片描述
persons = Person.objects.filter(p_age__in=[49,52,56])

6.创建对象

目的:向数据库中添加数据
当创建对象时,django不会对数据库进行读写操作,当调用save()方法时才会与数据库交互,将对象保存在数据库中。
注意: __ init__已经在父类models.Model中使用,在自定义的模型中无法使用。
创建对象方案:
在模型类中添加类方法去创建对象
@classmethod
def create(cls,name,age):
在自定义的管理器中添加方法来创建对象
在这里插入图片描述
创建对象的另一种方法:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值