首页 > 数据库 >SQL中的。和python中的。的区别。让你彻底明白 。

SQL中的。和python中的。的区别。让你彻底明白 。

时间:2025-01-16 17:45:22浏览次数:1  
标签:name 彻底 python sale 访问 SQL line order

SELECT sale_order.name, SUM(sale_order_line.price_total) as total_amount FROM sale_order JOIN sale_order_line AS sale_order_line ON sale_order.id = sale_order_line.order_id GROUP BY sale_order.id 像上面的语句中,sale_order.name 为什么这个可以.name 能像python那样对象.属性吗。 有什么规则,怎么区别,什么时候 能用.name,或者.其它属性

在 SQL 查询中,你提到的 sale_order.name 其实并不是像 Python 那样的对象属性访问,而是 SQL 中表的列名。在 SQL 中,.(点号)是用来区分不同层级的标识符的,通常用于区分表名与字段名(列名)。

让我们逐步解析这段 SQL 查询,并讨论 .name 这样的写法的含义和规则:

SQL 查询解析:
SELECT sale_order.name, SUM(sale_order_line.price_total) as total_amount
FROM sale_order
JOIN sale_order_line AS sale_order_line ON sale_order.id = sale_order_line.order_id
GROUP BY sale_order.id

 

  • sale_order.namesale_order_line.price_total 中的 nameprice_total 其实是 列名,而不是 Python 对象的属性。
  • sale_ordersale_order_line 是表的别名(alias),它们代表数据库中的不同表。
  • 通过 sale_order.namesale_order_line.price_total,SQL 知道你要从 sale_order 表和 sale_order_line 表中选择哪些列。

点号语法在 SQL 中的含义:

在 SQL 中,点号用于区分表名和列名。这是 SQL 的语法规则之一,它不是面向对象的属性访问。

  • sale_order.name 中的 sale_order 是表名,name 是该表中的列名。
  • 如果查询有多个表,且不同表中可能有相同名称的列,点号用来指定某个表的特定列。例如,sale_order.namesale_order_line.name 会指向不同表中的 name 列。

什么时候能使用 .name(类似的属性访问)?

  • 在 SQL 查询中,点号表示 "表名.列名" 或 "别名.列名"。
  • 如果你使用了 表的别名(例如 sale_order AS so),你可以通过别名来引用列,如 so.name,它等价于 sale_order.name

对比 Python 中的对象属性访问

在 Python 中,你可以通过 对象.属性 的方式访问实例的属性。但是 SQL 中的 表.列 语法是通过表名或别名来访问字段,而不是对象属性。它们虽然语法上有些相似,但语义完全不同。

例如:

  • Python 中object.name 访问的是对象 objectname 属性。
  • SQL 中table.name 访问的是表 table 中的 name 列。

Odoo ORM 中如何映射 SQL 查询到对象

在 Odoo 中,当你使用 ORM 时,点号(.)的行为类似于 Python 对象的属性访问。Odoo ORM 会把字段映射为模型的属性。例如,Odoo 中的 sale_order.name 实际上是访问 sale.order 模型的 name 字段。它背后会查询数据库中的 sale_order 表,并提取 name 列的值。

示例:

order = self.env['sale.order'].browse(order_id)
print(order.name)  # 这会访问 sale.order 表中的 name 列

在这种情况下,Odoo ORM 会自动生成对应的 SQL 查询,并通过表的字段来获取数据。这里的 order.name 实际上是访问 Odoo 模型 sale.order 中定义的字段,而 Odoo 会在背后处理与数据库的交互。

什么时候使用表的列名,什么时候使用模型的字段名?

  • 在 SQL 查询中,你直接引用 表名.列名别名.列名
    • 示例:sale_order.namesale_order_line.price_total
  • 在 Odoo ORM 中,你使用模型对象的字段名来访问字段。
    • 示例:order.nameorder_line.price_total

总结

  • SQL 查询 中,. 是用来表示表或表的别名和列之间的关系(例如 sale_order.name)。它并不是面向对象的属性访问,而是表的字段访问。
  • Odoo ORM 中,模型的字段可以通过 . 来访问,类似于 Python 中的属性访问。这是因为 Odoo 的 ORM 会自动将字段映射到数据库表的列。

所以,sale_order.name 在 SQL 中的含义是:访问 sale_order 表中的 name 列,而在 Odoo ORM 中,order.name 是访问 sale.order 模型中的 name 字段。

标签:name,彻底,python,sale,访问,SQL,line,order
From: https://www.cnblogs.com/lyt263/p/18675462

相关文章

  • 面向对象分析与设计Python版 控制器与多态原则
    文章目录一、控制器原则二、多态原则一、控制器原则控制器原则名称:控制器Controller应用场景:确定谁负责接收、处理和分发系统的输入事件。解决方案:系统输入事件处理的职责分给控制器对象一个控制器对象实现业务系统的所有输入事件处理和业务逻辑分发,这一类控制器......
  • 开发人员学习书籍推荐(C#、Python方向)
    作为一名开发人员,持续学习和提升自己的技术水平是至关重要的。如今,技术不断更新换代,新的开发框架、语言和工具层出不穷。对于刚入行的开发者或希望深入某一领域的工程师来说,选对书籍是学习的捷径之一。本篇文章将推荐一些经典的书籍,涵盖了C#、数据库、前端开发等多个领域,帮助你......
  • 【深度学习教程】Python 如何用 LSTM 做情感分析?小白也能上手!
    【深度学习教程】如何用LSTM做情感分析?小白也能上手!Hello大家好,今天我们来聊一个超热门的话题——LSTM网络在情感分析中的应用!想象一下,通过深度学习,你的代码可以读懂人类情绪,知道“我爱你”和“我讨厌你”的区别,是不是很酷?今天这篇文章,我会手把手教你从零开始,用Python和Ke......
  • SQL小记
    递归查询MYSQL数据schemacreatetableregion(region_novarchar(4)notnullprimarykey,contentvarchar(255)notnull,subregion_novarchar(4)null);模拟数据createdefiner=root@`%`procedurecreate_region_data(......
  • Python生成成绩报告单:从理论到实践
    在教育信息化日益普及的今天,自动化生成和处理学生成绩报告单已成为学校和教育机构的一项重要任务。Python作为一种功能强大且易于学习的编程语言,非常适合用于这种数据处理和报告生成任务。本文将详细介绍如何使用Python生成成绩报告单,包括理论概述和完整的代码示例。一、理论概述......
  • 【python入门】2.安装搭建python环境
    1.安装python解析器1.1为什么要装python解析器?python属于高级语言,计算机并不认识我们需要用解析器,将python文件,经过python解析器翻译成,计算机能够识别的机器语言1.2如何安装下载地址:PythonReleasePython3.7.9|Python.org检验安装完成在cmd中输入python,若出......
  • 在odoo中,为什么在模型中明明有这个字段值,但是在SQL查询中,却报错:没有这个字段?
    在odoo中为什么在模型中,有的字段,用SQL有的可以查到,有的字段却报错。selectsource_fact_no,confirmation_datefromsale_order_line[42703]ERROR:column"confirmation_date"doesnotexist位置:31这是什么原因,请详解一下。在Odoo中,字段与数据库表之间有一个映射关......
  • python毕设高铁订票系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于高铁订票系统的研究,现有研究多集中于传统订票系统的整体框架和功能实现,以大型订票平台的综合业务逻辑为主,专门针对python实现高铁......
  • sql server 每个表占用大小查询【转】
    SQLServer查看库、表占用空间大小 目录1.查看数据文件占用(权限要求较大)2.查看日志文件占用sqlserver查看所有表大小、所占空间基于T-SQL 转自:https://blog.csdn.net/yenange/article/details/50493580查询数据文件与日志文件占用情况,查看数据大小,查看库大......
  • Java开发防止SQL注入攻击
    在Java编程过程中,防止SQL注入攻击是非常重要的安全措施。以下是常用的防注入攻击措施及其原理:1.使用预编译语句(PreparedStatement)原理:PreparedStatement是JDBC提供的一种接口,它允许SQL语句在执行前被预编译。通过使用占位符?来代替参数值,并在执行时动态设置这些参......