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

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

一、多表模型创建

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.手动创建
### 如何从独立的Python脚本启动或初始化Django项目环境 要在独立的 Python 脚本调用 Django 环境并使用其 ORM 功能,需要手动加载 Django 的配置文件 `settings.py` 并完成必要的初始化工作。以下是实现这一目标的具体方法: #### 手动加载 Django 配置 为了使外部脚本能够访问 Django 提供的功能(如模型类),需执行以下操作: 1. 设置 `DJANGO_SETTINGS_MODULE` 环境变量,指向 Django 项目的设置模块。 2. 导入 `django.setup()` 函数,并在脚本中显式调用它。 具体代码如下所示[^1]: ```python import os import django # 设置 DJANGO_SETTINGS_MODULE 环境变量 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project_name.settings') # 初始化 Django 应用程序 django.setup() # 此处可以导入和使用 Django 模型或其他功能 from your_app.models import YourModel # 示例查询 objects = YourModel.objects.all() for obj in objects: print(obj.name) ``` 上述代码片段展示了如何通过设置环境变量以及调用 `django.setup()` 来初始化 Django 环境。这一步骤对于运行独立脚本至关重要,因为它允许脚本Django 数据库交互。 #### 创建虚拟环境与安装依赖项 如果尚未创建虚拟环境,则建议按照标准流程构建开发环境。例如,在 Windows 下可以通过以下方式建立虚拟环境并安装所需依赖项[^2]: ```bash # 安装 virtualenv 工具 pip install virtualenv # 创建新的虚拟环境 virtualenv env # 启动虚拟环境 .\env\Scripts\activate # 安装 Django 及其他必要组件 pip install django ``` 一旦完成了这些准备工作之后,就可以继续进行后续步骤——即利用前述技术手段编写自定义管理命令或者单独运行脚本来操控数据记录等内容了[^3]。 #### 总结注意事项 当尝试从非 Web 请求上下文中触发某些逻辑时,请务必确认已正确定义好所有关联路径;另外还需注意版本兼容性问题以免引发不必要的错误异常情况发生[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值