python-39简单表操作v

191 阅读2分钟

python Q 和 F 查询

https://www.cnblogs.com/wdliu/p/7977504.html

https://www.cnblogs.com/ccorz/p/5882400.html

1.单表操作

2.多表操作

3.views.py代码

from django.shortcuts import render,HttpResponse
from app01.models import *
# Create your views here.

def index(req):
    # Classes.objects.create(title="三班")
    # Classes.objects.create(title="四班")
    # Classes.objects.create(title="五班")
    #
    # Student.objects.create(username="fengfeng",age=14,gender=True,cs_id=1)
    # Student.objects.create(username="xiaorong",age=22,gender=False,cs_id=2)
    # Student.objects.create(username="fengfeng",age=11,gender=False,cs_id=3)
    # 三班的所有学生
    # ret=Student.objects.filter(cs__title="三班").values("username")
    # print(ret)
    #一般不做反向查询。。。。。。。。。。。。。
    # obj=Classes.objects.filter(title="四班").first()
    # print(obj.title)
    # print(obj.id)
    #默认为 student_set
    # print(obj.student_set.all())
    #自定义设置之后为 feng_set
    # print(obj.feng_set.all())
    #自定义设置之后可以取到
    # ret=Classes.objects.all().values("id","title","feng_set","feng_set__username")
    # print(ret)


    # ret1=Student.objects.all().values("username","cs__title")
    # ret2=Classes.objects.all().values("title","feng_set__username")
    # print(ret1)
    # print(ret2)

    #多表操作(对象)
    # Teachers.objects.create(name="fengfeng")
    # Teachers.objects.create(name="xiaorong")
    # Teachers.objects.create(name="liuzhen")
    # Teachers.objects.create(name="bange")

    # cls_list=Classes.objects.all()
    # for obj in cls_list:
    #     print(obj.id,obj.title,obj.m.all())
    #     for row in obj.m.all():
    #         print(row.name)


    #正向
    # obj=Classes.objects.filter(id=1).first()
    # obj.m.add(3)
    #反向
    #obj=Teachers.objects.filter(id=2).first()
    #默认
    # obj.classes_set.add(3)
    #自定义
    #obj.many_set.add(2)
    #相当于重置,如果有的话不操作,没有进行添加,多的进行删除
    #obj.many_set.set([1,2])


    #正向
    # v= Classes.objects.all().values("id","title","m","m__name")
    # print(v)
    #反向
    # v= Teachers.objects.all().values("name","many_set__title")
    # print(v)



    return HttpResponse("ok")

4.models.py

from django.db import models

# Create your models here.
"""
老师表
"""
class Teachers(models.Model):
    name=models.CharField(max_length=32)
#单表
# Teachers.objects.create(name='root')
# obj=Teachers(name='root')
# obj.save()
# Teachers.objects.all()
# Teachers.objects.filter(id=1,name='root')
# Teachers.objects.filter(id__gt=1).first()#大于1第一个
# Teachers.objects.filter(id=1).delete()
# Teachers.objects.all().update(name="alex")
# Teachers.objects.filter(id=1).update(name="alex")
"""
班级表
"""
class Classes(models.Model):
    title=models.CharField(max_length=32)
    m = models.ManyToManyField(Teachers,related_name="many_set")
    def __str__(self):
        return self.title
#多对多
#创建
# obj=Classes.objects.filter(id=1).first()
# #增加
# #老师id=2相当于
# obj.m.add(2)
# obj.m.add(3)
# #添加多个
# obj.m.add([4,5])
# #删除
# obj.remove([4,3])#删除班级id=1对应的老师id为4,3的数据
# obj.clear()#删除班级id=1的所有数据
# #重置
# obj.set([2,3,5])#表示把班级id=1对应的老师id更改设置为2,3,5
# #查询
# obj=Classes.objects.filter(id=1).first()
# ret=obj.m.all()#班级id=1对应的所有的老师列表


class Student(models.Model):
    username=models.CharField(max_length=32)
    age=models.IntegerField()
    gender=models.BooleanField()
    cs=models.ForeignKey(Classes,on_delete=models.CASCADE,related_name="feng_set")

    def __str__(self):
        return self.username+self.age+self.gender+self.cs

#一对多
"""
id username age gender cs_id
"""
# Student.objects.create(username="fengfeng",age=15,gender=0,cs_id=1)
# Student.objects.create(username="fengfeng",age=15,gender=0,cs=Classes.objects.filter(id=1).first())
# Student.objects.all()
# Student.objects.filter(id=1).delete()
# input("请输入班级ID")
#跨表操作用双下划线
# Student.objects.filter(cs__name="fengfeng").delete()
#Student.objects.filter(id=1).update(cs__name="fengfeng111")

#所有学生名称和班级名称
# Student.objects.all().values("username","cs__name")
#三班的所有学生
# Student.objects.filter(cs__name="三班").values("username")