django数据库之建表

django数据库之建表

首先了解几个知识:
	什么是一对多,多对多,一对一
	什么是关联查询
	什么是主表,什么是从表
	外键放的位置
	正向查询,反向查询
	各种设计模式下,怎么查询
一对多:
	班级表和学生表
	一个班级可以有多个学生,一个学生属于那个班级

一对一:
	学生表和学生信息表
	每个学生对应各自的学生信息
	
多对多:
	学生表和课程表
	一个学生可以选多门课程,一个课程可以别多个学生选
关联查询:
	查询数据需要牵扯多个表,需要从多个表中提取字段数据
	
种类:
	内连接
	外链接
	交叉拦截(笛卡尔积)
主表:
	表中主键可以作为另一个表的外键关联的表叫做主表

从表:
	拥有此外键的表
一对一关系中外键放的位置:(学生和学生信息表)
	放那个表都行,只不过就是主从表的区别
	放在A表,B表就是主表
	class Student(models.Model):
        id = models.AutoField(primary_key=True)
        sname = models.CharField(max_length=32)
        # 一对一
        detail = models.OneToOneField("StudentDetail", to_field="id")
        # 等同于如下的代码        
        # detail = models.ForeignKey(to="StudentDetail",to_field="id",unique=True)
    
    class StudentDetail(models.Model):
        id = models.AutoField(primary_key=True)
        height = models.PositiveIntegerField()
        email = models.EmailField()
        memo = models.CharField(max_length=128)
	
一对多关系中外键放的位置:(学生和班级表)
	外键放在多的那一方
	class Class(models.Model):
        id = models.AutoField(primary_key=True)
        cname = models.CharField(max_length=32)
        cdata = models.DateField()
                
    class Student(models.Model):
        id = models.AutoField(primary_key=True)
        sname = models.CharField(max_length=32)
        # 一对多
        # cid = models.ForeignKey(to="Class",to_field="id",related_name="student")
		cid = models.ForeignKey(to="Class", to_field="id")

	
多对多关系中外键放的位置:(老师和班级表)
	多对多有多种设计方法:
		1:(放一个中间表)
            class Teacher(models.Model):
                id = models.AutoField(primary_key=True)
                tname = models.CharField(max_length=32)
               
            class Class(models.Model):
                id = models.AutoField(primary_key=True)
                cname = models.CharField(max_length=32)
                cdata = models.DateField()

            class Teacher2Class(models.Model):m
                id = models.AutoField(primary_key=True)
                tid = models.ForeignKey(to="Teacher",to_field="id")
                cid = models.ForeignKey(to="Class",to_field="id")
          2:(两个表)
             class Class(models.Model):
                 id = models.AutoField(primary_key=True)
                 cname = models.CharField(max_length=32)
                 cdata = models.DateField()
    
             class Teacher(models.Model):
                 id = models.AutoField(primary_key=True)
                 tname = models.CharField(max_length=32)
                 cid = models.ManyToManyField(to="Class",name="teacher")
正向查询:
	由主表查从表
	
反向查询:
	由从表查主表
关联查询:(一对多模式)
	由一到多的语法:
		一对应的模型类对象.多对应的模型类名小写__set
            b = BookInfo.objects.get(id=1)
            b.heroinfo_set.all()
     由多到一的语法:
     	多对应模型列对象.多对应的模型类中的关系类属性名
            h = HeroInfo.objects.get(id=1)
            h.hbook
            
多对多模式查询:
	https://www.cnblogs.com/xiongfanyong/p/13022332.html

在这里插入图片描述

我是清茶!欢迎你和我一起讨论,我们下期见

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Django是一个高效且功能强大的Web框架,它可以轻松地连接到多种类型的数据库Django支持的数据库类型包括SQLite、MySQL、PostgreSQL、Oracle等。在Django中,我们使用ORM(对象关系映射)来连接数据库,ORM将数据库中的映射为Python中的类,并将中的每个字段映射为Python中的属性。 在Django中,我们需要在settings.py文件中配置数据库连接信息,包括数据库类型、数据库名称、数据库用户名和密码等。配置完成后,我们可以使用Django提供的ORM进行数据库操作,例如创建表、查询数据、插入数据等。 以下是一个简单的Django数据库连接的示例: 1. 在settings.py文件中配置数据库连接信息: ``` DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': 'localhost', 'PORT': '3306', } } ``` 2. 创建一个模型类: ``` from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=50) pub_date = models.DateField() ``` 3. 在views.py中进行数据库操作: ``` from django.shortcuts import render from .models import Book def book_list(request): books = Book.objects.all() return render(request, 'book_list.html', {'books': books}) ``` 以上代码展示了如何使用Django ORM连接数据库,并使用模型类进行数据操作。如果您有更多关于Django数据库连接的问题,请随时提出,我会尽力为您解答。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值