小白IT:ORM重难点多表(跨表)查询、分组、python脚本怎么调用django 环境等

本文详细介绍了Django ORM中的多表模型创建,包括一对一、一对多、多对多关系的建立与操作。接着讨论了多表查询的重难点,如基于对象和双下划线的跨表查询、聚合与分组查询,以及F和Q查询的使用。此外,还涵盖了如何在ORM中执行原生SQL语句和在python脚本中调用Django环境。
摘要由CSDN通过智能技术生成

一、多表模型创建

1.数据库中的表关系

在数据库中表与表之间的关系分:一对一,一对多,多对多

  • 一对一的表关系通过外键+唯一约束表示
  • 一对多的表关系通过外键约束来表示,一对多和多对一是相对而言的。
  • 多对多的表关系通过建立第三张表设置外键来表示

在这里插入图片描述

2.ORM中的类关系模型

在orm中,表与表之间的关系通过类名来建立,类名中定义属性关联另一个类。

  • 一对一的类关系通过OneToOneField()来建立
  • 一对多的类关系通过ForeignKey()来建立
  • 多对多的类关系通过ManyToManyField()来建立

orm中模型建立models.py文件

orm中model.py文件

from django.db import models
# Create your models here.class Author(models.Model):
    id = models.AutoField(primary_key=True)  # 可以省略
    name = models.CharField(max_length=32)
    age = models.IntegerField()class Publish(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    # 一对一关系建立,本质就是foreignkey+unique,orm中会自动给这个字段拼接一个_id。
    authorDetail = models.OneToOneField(to="PublishDetail", to_field="id", on_delete=models.CASCADE)  # 设置联级更新,默认选项class PublishDetail(models.Model):
    id = models.AutoField(primary_key=True)
    telephone = models.BigIntegerField()
    city = models.CharField(max_length=32)class Book(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=5,decimal_places=2)
    # 多对一关系,外键关联出版社表
    publish = models.ForeignKey(to="Publish", to_field="id", on_delete=models.CASCADE)
    # 建立表之间的多对多关系
    authors=models.ManyToManyField(to="Author")  # mysql中需要我们手动建立第三张表,而orm中自动帮我们建立第三张表

注意
  • 一对多表关系建立,外键字段建立在多的一方
  • 多对多表关系中,外键会默认关联表的主键id,第三张表创建方式有多种。
  • 创建多对多的authors名字,并不会在Book表中生成对应字段,而authors是用于多表查询的。

创建第三张表的方式

1.手动创建
class Book(models.Model):
    title = models.CharField(max_length=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值