美文网首页
python编写数据库表关系

python编写数据库表关系

作者: 生命有一种执着 | 来源:发表于2020-06-30 17:49 被阅读0次
image.png

表关系(一对一,一对多,多对多)

from django.db import models

# Create your models here.

"""
学生表
包含属性:
    姓名、年龄、性别、QQ、电话、创建时间
"""
class Student(models.Model):
    name = models.CharField("姓名",max_length=20)#姓名属性,并指定长度
    age = models.SmallIntegerField("年龄",null=True)#年龄,可以为空
    sex = models.SmallIntegerField("性别",default=1)#性别,默认为1(1表示男)
    QQ = models.CharField("QQ号码",max_length=20,unique=True)#QQ号码,指定长度,并设置唯一
    phone = models.CharField("电话号码",max_length=20,unique=True)#电话号码,指定长度,并设置唯一
    c_time = models.DateTimeField("创建时间",auto_now_add=True)

    """
    将学生表与学生详情表关联起来
    定义detail,使用models.OneToOneField关联StudentDetail表,实现学生表与学生详情表成一对一关联,
    也可以在学生表中写;
    on_delete=models.SET_NULL表示当我的学生详情不存在时,学生表表可以存在,但详情为空
    与下面的一对一二选一
    """
    # detail = models.OneToOneField("StudentDetail",on_delete=models.SET_NULL,null=True)

    """
    将学生表与班级表关联起来
    定义grade,使用models.ForeignKey关联Grade表,实现班级表与学生表成一对多关联,
    on_delete=models.SET_NULL表示当班级不存在时,学生表可以存在,但详情为空
    """
    grade = models.ForeignKey("Grade",on_delete=models.SET_NULL,null=True)

    def __str__(self):
        return "{}-{}".format(self.name,self.age)
"""
学生详情表
包含属性:
    学院
学生详情表与学生表成一对一关系
"""
class StudentDetail(models.Model):
    college = models.CharField("学院",max_length=20)#学院属性,并指定长度
    """
    将学生表与学生详情表关联起来
    定义student,使用models.OneToOneField关联Student表,实现学生表与学生详情表成一对一关联,
    也可以在学生表中写;
    on_delete=models.CASCADE表示当我的学生不存在时,详情表也不能存在,
    
    """
    student = models.OneToOneField("Student",on_delete=models.CASCADE)

"""
班级表
包含属性:
    班级名称、班期
班级表与学生表成一对多关系
"""
class Grade(models.Model):
    name = models.CharField("班级名称",max_length=20)
    num = models.CharField("班期",max_length=20)

"""
课程表
包含属性:
    名称、
与学生表是多对多关系
"""
class Course(models.Model):
    name = models.CharField("课程名称",max_length=20)
    """
    关联学生表,生成迁移的时候自动生成一个中间表
    
    回滚:有的时候我们不需要它自定义的中间表,我们想用自己写的中间表,这时候在进行多对多的时候,
    我们在做迁移的时候先将多对多的表注释,然后在取消注释,再次进行迁移,迁移后在进行回滚:
    python manage.py migrate 0001
    在回滚后要将之前第二次迁移生成的0002文件删除
    之后我们就可以写中间表了
    through="Enroll":表示在创建好 多对多关系的时候,要指明两张多对多的表是通过Enroll中间表挂钩的
    这也是多对多的表与其他关系表不一样的地方
    
    """
    students = models.ManyToManyField("Student",through="Enroll")

"""
中间表
包含属性:
    必须有另外两张表对应起来,添加student,course的属性
    再添加自定义的属性,pay(钱),报名时间:c_time
"""
class Enroll(models.Model):
    """
    对与中间表来说,中间表是连接多对多的桥梁,与另外两张表是一对多的关系,并且一边不存在,那么中间表也将不存在

    """
    student = models.ForeignKey("Student",on_delete=models.CASCADE)
    course = models.ForeignKey("Course",on_delete=models.CASCADE)
    pay = models.FloatField("缴费金额",default=0)
    c_time = models.DateTimeField("报名时间",auto_now_add=True)

查看数据库中已完成的表

mysql> show tables;
+----------------------------+
| Tables_in_BasketBall       |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| students_course            |
| students_enroll            |
| students_grade             |
| students_student           |
| students_studentdetail     |
| teacher_student            |
+----------------------------+



这样,我们表关系的具体流程就搞定了!

相关文章

  • python编写数据库表关系

    表关系(一对一,一对多,多对多) 查看数据库中已完成的表

  • SQLAlchemy中“一对多”场景下的排序取数

    Python操作数据库表时常用SQLAlchemy做ORM,把关系数据库的表结构映射到对象上,并通过relatio...

  • 初识mongodb

    MongoDB 关系型数据库和费关系型数据库 关系型数据库,表和表之间有关系(外键) 非关系型数据,表盒表之间没关...

  • 10.MongoDB 介绍与初识

    关系型数据库和非关系型数据库 表就是关系,或者说表与表之间存在关系。 所有的关系型数据库都需需要通过 sql 语言...

  • MongoDB

    关系型数据库和非关系型数据库表就是关系或者说表与表之间存在关系 所有的关系型数据库都需要通过 sql 语言来操作 ...

  • 65. SQLAlchemy

    ORM技术:Object-Relational Mapping,把关系数据库的表结构映射到对象上 在Python中...

  • redis入门

    redis是一款非关系型数据库,使用c语言编写,支持java,go,python,c,c#等多种编程语言。 red...

  • 【Java中级】9.0 SSH之Hibernate框架(六)——

    1.0 数据库表与表之间的关系 数据库表与表之间的关系 1.1 一对多关系 什么样关系属于一对多?一个部门对应多个...

  • 数据库入门之3张表对比关系型与非关系型数据库

    数据库入门之3张表对比关系型与非关系型数据库 本期使用3张表将关系型与非关系型数据库进行比对,让大家了解主流数据库...

  • Flask+Echarts实现数据可视化(一)

    任务说明: 基于Flask-SQLAlchemy框架编写数据库映射模型,完成数据库表结构映射模型。 编写可视化后台...

网友评论

      本文标题:python编写数据库表关系

      本文链接:https://www.haomeiwen.com/subject/oegxqktx.html