Django学习笔记——模型,数据库(二)——QuerySet API

目录

  • 1.修改models.py
  • 2.创建数据库描述文件,并生成对应表格
  • 3.QuerySet API学习
    • (1)新增数据
    • (2)查询
    • (3)筛选与排除 filter&exclude
    • (4)删除
    • (5)更新
    • (6)检查是否有元素存在 exists()
    • (7)排序 order_by()
    • (8)对于QuerySet 不支持负索引的问题
    • (9)表格合并 |
    • (10)去重 distinct()
    • (11)查看程序执行的Sql语句 query
    • (12)以元组(values_list)、字典(values)形式获取查询结果

本文为博主跟学及相关知识点实践、整理、补充

1.修改models.py

注意charfield必须要指定max_length

from django.db import models

class Student(models.Model):
    #学生:学号,姓名,年龄
    #CharField:
    #在数据库层面是varchar类型。在Python层面就是普通的字符串。
    #这个类型在使用的时候必须要指定最大的长度,也即必须要传递max_length这个关键字参数进去。
    studentid = models.CharField(max_length=30,default="0005")
    studentname = models.CharField(max_length=30,default="Harry")
    age = models.IntegerField()
    def __str__(self): #返回一个对象的描述信息
        return self.studentname

class Course(models.Model):
    #课程:授课老师,学号,课程数量
    teacher = models.CharField(max_length=30,default="T3")
    amount = models.IntegerField()
    studentname = models.CharField(max_length=30,default="Harry")

    def __str__(self):
        return self.teacher

2.创建数据库描述文件,并生成对应表格

(base) D:\YYL\Mine\Study\Django_student>python manage.py makemigrations
(base) D:\YYL\Mine\Study\Django_student>python manage.py migrate

3.QuerySet API学习

(1)新增数据

在manage.py文件同级目录创建msg_init.py用于练习,并在文件中输入以下代码:

from Django_student.wsgi import *
from student_mine.models import Student,Course

student_dict = {
   'Jenny':'0001','Tom':'0002','Jhon':'0003','Lisa':'0004'}
std_age = 18

def studentmsg_init():
    '''
    插入数据
    :return:
    '''
    #创建对象的四种方式
    #1 使用create创建
    Student.objects.create(studentname='Jenny',studentid=student_dict['Jenny'],age=std_age)
    Student.objects.create(studentname='Lisa',studentid=student_dict['Lisa'],age=std_age)
    #2
    Tom_msg = Student(studentname='Tom',studentid=student_dict['Tom'],age=std_age)
    Tom_msg.save()
    #3
    Jhon_msg = Student()
    Jhon_msg.studentname = 'Jhon'
    Jhon_msg.studentid = student_dict['Jhon']
    Jhon_msg.age = std_age
    Jhon_msg.save()
    #4 首先尝试获取时,若不存在就创建,可以防止重复
    #obj,tmp = Student.objects.get_or_create(studentname='Lisa')
    #output:(object,True/False)

if __name__ == '__main__':
    #先删除之前练习创建的表格内容
    Student.objects.all()

你可能感兴趣的:(python,数据库,python,django)