python在不同的表关系下进行表数据的操作

表关联操作及多表查询

image.png

一对多(增删改查)

正向:一个模型中存在外键字段,通过这个模型对外键进行操作就叫正向;
反向:一个模型如果被另个一个模型外键关联,通过这个模型对关联它的模型操作叫反向;

class Student(models.Model):
        grade = models.ForeignKey("Grade",on_delete=models.SET_NULL,null=True)

正向增加学生

增加学生:通过班级id对应增加
Student.objects.create(name="Aaron",age=23,QQ="6445379473",phone="13345857594",grade_id=1) 
Student.objects.create(name="Bleak",age=23,QQ="539673962",phone="15647557594",grade_id=3) 

多对多(增删改查)

学生表与课程表是多对多关系

class Course(models.Model):
    name = models.CharField("课程名称",max_length=20)
    students = models.ManyToManyField("Student",through="Enroll",related_name="course")#related_name="course"表示将反向模型管理器重新命名

反向模型管理器是:course_set,将course替换course_set

反向增加数据

from students.models import Student,StudentDetail,Grade,Course,Enroll 
c1 = Course.objects.create(name="python") #增加一个课程
s1 = Student.objects.first()#选择任意一个学生
e = Enroll() #创建一个空的中间表,用于学生与课程的关联
e.course=c1  
e.student=s1   #将学生与课程关联起来
e.save()#保存

查看课程表

 select * from students_course;
+----+--------+
| id | name   |
+----+--------+
|  1 | python |
+----+--------+
1 row in set (0.00 sec)

查看学生与课程的中间表

select * from students_enroll;
+----+-----+----------------------------+-----------+------------+
| id | pay | c_time                     | course_id | student_id |
+----+-----+----------------------------+-----------+------------+
|  1 |   0 | 2020-07-01 07:43:56.276152 |         1 |          1 |
+----+-----+----------------------------+-----------+------------+
1 row in set (0.00 sec)

一对一(增删改查)

正向:一对一所在的模型,通过这个模型去访问关联的模型就叫正向;

d1 = StudentDetail(college="北京理工大学") #创建一所学校
d1.student = s1#进行关联
d1.save()#保存

查看学生详情表

 select * from students_studentdetail;
+----+--------------------+------------+
| id | college            | student_id |
+----+--------------------+------------+
|  1 | 北京理工大学       |          1 |
+----+--------------------+------------+
1 row in set (0.00 sec)

你可能感兴趣的:(python在不同的表关系下进行表数据的操作)