Skip to content

Latest commit

 

History

History
153 lines (97 loc) · 4.03 KB

2.2django_mysql_lianxi.md

File metadata and controls

153 lines (97 loc) · 4.03 KB

模型练习指南

Auth: 王海飞 Data:2018-04-23 Email:779598160@qq.com github:https://github.com/coco369/knowledge

前言

  通过讲mysql的系统,翻译一遍,在django中通过创建model去和数据库中的表进行一一映射,并且通过ORM封装 的处理方式去练习这一到习题,并写出如下的解题答案

1.数据库准备

在model中定义数据库,其中的性别,男的存1,女的存0。

class Student(models.Model):
    stuname = models.CharField(max_length=20)
    stusex = models.BooleanField()
    stubirth = models.DateField()
    stutel = models.CharField(max_length=255)

    class Meta:
        db_table = 'student'

2.数据库迁移

python manage.py makemigrations
python manage.py migrate

3. 数据插入

3.1 使用表单form提交post请求数据
<form action="/app/addStu/" method="post">
    stuname: <input type="text" name="name">
    stusex: <input type="text" name="sex">
    stubirth: <input type="date" name="birth">
    stutel: <input type="text" name="tel">
    <input type="submit" value="提交">
</form>
3.2 获取post请求,获取请求数据,并且创建数据
方法1:获取类对象进行save()保存
stu = Student()
stu.stuname = stuname
stu.stusex = sex
stu.stubirth = birth
stu.stutel = tel
stu.save()
方法2:使用create()方法
Student.objects.create(stuname=stuname, 
						stusex=sex,
						stubirth=birth, 
						stutel=tel)
方法3:使用初始化
在Student模型中重构__init__()方法,添加如下代码

def __init__(self, name, birth=None, sex=None,tel=None):
    super().__init__()
    self.stuname = name
    self.stubirth = birth 
    self.stusex = sex
    self.stutel = tel

# 视图函数中定义创建学习信息的方法为:
stu = Student('小草', 18, 1, 12331244323)
stu.save()

注意:重构__init__方法的时候,一定要使用super().__init__(),否则会报studen对象没有_state的属性。

4. 查询所有的学生信息

使用all()方法获取所有的数据

Student.objects.all()

4. 查询所有女学生的姓名和出生日期

Student.objects.filter(stusex=0)
或者
Student.objects.exclude(stusex=1)

其中:

filter():返回符合条件的数据

exclude():过滤掉符合条件的数据

5.查询所有的学生,按照id从大到小排序

Student.objects.all().order_by('-id')

其中:

order_by('id'):表示按照id升序的排列

order_by('-id'):表示按照id降序的排列

6. 查询所有的学生信息,并序列化

Student.objects.all().values()
Student.objects.all().values('s_name', 's_age')

7.查询所有80后学生的姓名、性别和出生日期(筛选)

Student.objects.filter(stubirth__gte='1980-01-01', 
						stubirth__lte='1990-01-01')

8.查询名字中有王字的学生的姓名(模糊),like '%小%', like '小%',like '%小'

Student.objects.filter(s_name__contains='小')
Student.objects.filter(s_name__startswith='小')
Student.objects.filter(s_name__endswith='小')

9.查询id等于1,2的学生信息

# select * from student where id in (1,2)
stus = Student.objects.filter(id__in=[1,2])

10. 获取id为1的信息,get()和filter()的使用

Student.objects.filter(id=1)
Student.objects.get(id=1)
Student.objects.get(pk=1)

# get获取不到数据会直接报错, filter获取不到数据是返回空
stus = Student.objects.get(pk=5)
Student.objects.filter(id=5)

# get只能返回一个数据,返回多个会报错
Student.objects.get(s_age=15) # 前提条件:数据库中s_age为15的数据有多条

11.获取所有学生(按照id降序)中第一个/最后一个学生信息

# 获取按照id降序的第一个学生信息
Student.objects.all().order_by('-id')[0]
Student.objects.all().order_by('-id').first()
# 获取所有学生(按照id降序)中最后一个学生信息
Student.objects.all().order_by('-id').last()