首页 > 数据库 >【odoo | SQL】odoo使用sql语句操作数据库

【odoo | SQL】odoo使用sql语句操作数据库

时间:2024-06-17 11:33:27浏览次数:11  
标签:示例 sql odoo 查询 char field SQL cr

概要

        Odoo的SQL指的是在Odoo框架内使用SQL语句直接操作数据库。这些操作通常是通过Odoo提供的数据库游标(self.env.cr)来执行的。虽然Odoo主要鼓励使用其ORM(对象关系映射)来进行数据库操作,因为ORM更安全、易维护且与Odoo的模型和视图系统深度集成,但在某些情况下,直接使用SQL查询可能更高效或更直接。

使用场景

  • 复杂查询

    • 当需要执行复杂的SQL查询,如多表连接、嵌套查询或使用特定的SQL函数时,直接编写SQL查询可能更高效和直接。
    • 示例:获取某个时间段内的销售统计数据,涉及多个表的联合查询。
  • 性能优化

    • 在某些情况下,直接使用SQL查询可能比使用ORM方法更快。例如,批量数据处理或需要高性能的读写操作。
    • 示例:大批量插入数据或更新操作。
  • 数据迁移和转换

    • 在数据迁移、清理或转换过程中,直接使用SQL查询可以简化操作。
    • 示例:将数据从一个模型迁移到另一个模型或批量更新数据格式。
  • 报告和分析

    • 在生成复杂的报表和数据分析时,直接使用SQL查询可以更灵活地获取所需数据。
    • 示例:自定义财务报告或销售分析。
  • 操作系统特性

    • 某些数据库特定的功能,如存储过程、触发器等,可能需要直接使用SQL来调用和管理。
    • 示例:调用PostgreSQL的特定函数或特性。

用法

准备一个模型:

from odoo import api, fields, models, modules, tools, _
import logging
_logger = logging.getLogger(__name__)

class AllFieldAbout(models.Model):
    _name = "all.field.about"
    _description = """字段相关内容"""

    char_field = fields.Char('name字段')

 实现需求:使用SQL查询和更新all.field.about模型中id为2的记录,并将char_field的值更改为“小羊肖恩”。

    def button_go_sql(self):
        """
        odoo中的sql语句
        """
        # 获取数据库游标
        cr = self.env.cr

        try:
            # 查询id为2的记录
            select_query = """
                    SELECT id, char_field
                    FROM all_field_about
                    WHERE id = %s
                    """
            cr.execute(select_query, (2,))
            record = cr.fetchone()

            if record:
                _logger.info(f"Record before update: ID={record[0]}, char_field={record[1]}")

                # 更新char_field的值为“小羊肖恩”
                update_query = """
                        UPDATE all_field_about
                        SET char_field = %s
                        WHERE id = %s
                        """
                cr.execute(update_query, ('小羊肖恩', 2))

                # 提交事务
                cr.commit()
                _logger.info(f"Record with ID=2 updated successfully.")
            else:
                _logger.warning("No record found with ID=2.")

        except Exception as e:
            # 发生异常时回滚事务
            cr.rollback()
            _logger.error(f"Error executing SQL: {e}")
            raise

小结

        多写多敲多思考,毕竟,知己知彼才能看懂源码。

Tip:本人才学尚浅,如有纰漏,还请不吝赐教!

标签:示例,sql,odoo,查询,char,field,SQL,cr
From: https://blog.csdn.net/weixin_51062083/article/details/139736881

相关文章

  • 【odoo17】富文本小部件widget=“html“的使用
    概要        HTML富文本字段通常用于在模型中存储和显示格式化的文本。通过这种字段,用户可以利用HTML标签来格式化文本,从而在前端呈现更丰富的内容。        在Odoo中,HTML字段在没有明确指定widget="html"的情况下,也会默认显示为富文本编辑器。这是因为Odoo......
  • SHOW PROCESSLIST 最多能显示多长的 SQL?
    在MySQL中,如果我们想查看实例当前正在执行的SQL,常用的命令是SHOWPROCESSLIST。但如果SQL过长的话,就会被截断。这时,我们一般会用SHOWFULLPROCESSLIST来查看完整的SQL。最近碰到一个case,发现无论是使用 SHOWPROCESSLIST、SHOWFULLPROCESSLIST,还是performance_schem......
  • 【SQL边干边学系列】09高级问题-5
    文章目录前言回顾高级问题52.有供应商或客户的国家53.有供应商或客户的国家-版本254.有供应商或客户的国家-版本355.每个国家的第一个订单56.在5天的期限内有多个订单的客户57.在5天期限内有多个订单的客户-版本2答案52.有供应商或客户的国家53.有供应商或客户的......
  • 9、docker-mysql容器数据同步到本机-挂载
    1、查看镜像、下载镜像·dockersearchmysql·dockerpullmysql:5.7//指定下载5.7版本2、启动镜像-d后台运行-p端口映射主机端口:容器端口-v卷挂载-e环境配置这里配置的是数据库的密码--name容......
  • MySQL 远程访问失败的原因及解决方案
    原文地址:MySQL远程访问失败的原因及解决方案_mysql远程访问失败-CSDN博客文章目录1、失败的原因1.1、`/etc/mysql/my.cnf`文件中`bind-address=127.0.0.1`没有注释掉1.2、端口`3306`没有开放,使用`ss-tlnp`命令查看网络端口开启状态1.3、在`MySQL`数据库`user`表中`host`......
  • SQL注入-布尔盲注
    适用场景适用于页面没有回显字段,只返回Ture和Flase注入流程求当前数据库长度求当前数据库表的ASCII求当前数据库中表的个数求当前数据库中其中一个表名的长度求当前数据库中其中一个表名的ASCII求列名的数量求列名的长度求列名的ASCII求字段的数量求字段内容的......
  • MySQL和PostgreSQL
    首先,两个数据区连接驱动不一样,选用相应的依赖即可语法区别:1.TIMESTAMPTZ类型与LocalDateTime不匹配,异常信息如下:PSQLException:CannotconvertthecolumnoftypeTIMESTAMPTZtorequestedtypejava.time.LocalDateTime如果postgres表的字段类型是TIMESTAMPTZ ,但是java对......
  • mysql dump 拉取远程数据同步到本地库的shell 脚本
    #!/bin/bash#远程MySQL连接信息REMOTE_HOST="8.8.11.100"REMOTE_USERNAME="root"REMOTE_PASSWORD="Yaya@1972"#本地MySQL连接信息LOCAL_HOST="8.8.9.248"#或者"localhost"LOCAL_USERNAME="root"LOCAL_PASSWORD......
  • 借助AI进行Odoo-OCA模块的中国本地化自动化翻译
    背景描述最近在参与OCA模块的中文翻译,在线操作Weblate逐条不够丝滑,遂下载po文件使用poedit进行翻译;但是用poedit操作几次之后发现几乎都是重复劳动,本着程序员一个活重复干三遍以上就自动化的原则,驱动通义千问去编写脚本调用AI的接口进行自动化的翻译。LLMAPIProvider用的月......
  • 【MySQL】(基础篇十三) —— 联结
    联结本文介绍什么是联结,为什么要使用联结,如何编写使用联结的SELECT语句。介绍如何对被联结的表使用表别名和聚集函数。SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表。联结是利用SQL的SELECT能执行的最重要的操作,很好地理解联结及其语法是学习SQL的一个极为......