RunnablePassthrough在流水线中查看中间生成的 SQL 查询,方便调试

news/2025/3/4 11:35:42/
debug_chain = RunnablePassthrough(lambda data: (print("write_query execution result:", data["query"]), data)[1])

我们来看这段代码时,其实可以把它拆成两部分来理解。这个 lambda 匿名函数的核心作用是:在数据流中打印出调试信息(这里打印 data[“query”] 的值),同时不改变传入的数据,继续把原始数据传递下去。

分步说明

假设链中传递的数据是一个字典,比如:

data = {"query": "SELECT * FROM Playlist;","other_info": "some other data"
}

下面我们详细解释 lambda 函数的每个部分:

lambda data: (print("write_query execution result:", data["query"]), data)[1]
  1. lambda data: …

    • 这定义了一个匿名函数,接收一个参数 data
    • 在我们的例子中,data 就是上面的字典。
  2. (print(“write_query execution result:”, data[“query”]), data)

    • 这里创建了一个元组,有两个元素:

      • 第一个元素:
        • print("write_query execution result:", data["query"])
        • 当这个表达式执行时,会打印出:
          write_query execution result: SELECT * FROM Playlist;
          
        • 注意:print() 函数在 Python 中执行后会返回 None
      • 第二个元素:
        • 就是原始的 data 字典。
    • 因此,如果我们在函数中传入上面的 data,元组就相当于:

      (None, {"query": "SELECT * FROM Playlist;", "other_info": "some other data"})
      
  3. [1]

    • 这个部分是对上面元组进行索引,取索引为 1 的元素,也就是第二个元素,即原始的 data
    • 最终,整个 lambda 函数的返回值就是原始传入的 data

具体举例说明

下面用一个完整的例子来说明这个 lambda 函数的作用:

# 定义匿名函数
my_lambda = lambda data: (print("write_query execution result:", data["query"]), data)[1]# 构造一个示例数据字典
sample_data = {"query": "SELECT * FROM Playlist;","result": None
}# 调用匿名函数
returned_data = my_lambda(sample_data)

执行过程:

  1. 当调用 my_lambda(sample_data) 时,lambda 函数内部先执行:

    print("write_query execution result:", sample_data["query"])
    

    这行代码会输出:

    write_query execution result: SELECT * FROM Playlist;
    
  2. 然后,构造的元组是:

    (None, sample_data)
    
  3. 索引 [1] 取到了 sample_data,所以 my_lambda(sample_data) 的返回值依然是:

    {"query": "SELECT * FROM Playlist;", "result": None}
    

总结:

  • 这段代码的语法利用了 lambda 表达式创建一个匿名函数,用元组来同时完成“打印调试信息”和“返回原数据”两个任务。
  • 使用元组的原因是我们希望在不改变数据的情况下执行 print 这个副作用操作,然后依旧把原始数据传递到流水线的下一步。

这样,在链中调用这个调试函数时,你就可以看到生成的 SQL 查询被打印出来,同时数据本身也没有受到影响,继续传递给后续步骤。


http://www.ppmy.cn/news/1576528.html

相关文章

Windows 图形显示驱动开发-WDDM 3.2-GPU-P 设备上的实时迁移(一)

本文介绍了通过 SR-IOV(单根 I/O 虚拟化)分区虚拟化的异构计算设备(GPU、NPU 等)实时迁移的功能设计。 通过 WDDM 和 MCDM 驱动程序模型支持分区的设备现已成为我们虚拟化产品不可或缺的一部分。 因此,必须支持实时迁移并帮助我们的虚拟化抽象实现最大程度的可靠性&…

应急响应靶场练习-知攻善防

前言:学了一些应急响应的知识后,懵懵的,不就是查看一些文件嘛然后分析嘛,但是总感觉并没有完全掌握。于是就想找一些靶场进行练习,之后就利用搜索引擎找一些应急响应的靶场,目前能找到的真不多啊&#xff0…

【Word2Vec】Skip-gram 的直观理解(深入浅出)

01 什么是skip-gram 一句话来说就是,给定中心词,然后预测其周围的词: 02 模型结构 对于skip-gram来说,输入是一个[1 x V]维的ont-hot向量,其中V为词表大小,值为1的那一项就表示我们的中心词。经过一个[V x…

清华北大DeepSeek六册

「清华北大-Deepseek使用手册」 链接:https://pan.quark.cn/s/98782f7d61dc 「清华大学Deepseek整理) 1-6版本链接:https://pan.quark.cn/s/72194e32428a AI学术工具公测链接:https://pan.baidu.com/s/104w_uBB2F42Da0qnk78_ew …

Cherno C++ P60 为什么不用using namespace std

这篇文章我们讲一下之前写代码的时候的一个习惯&#xff0c;也就是不使用using namespace std。如果我们接触过最早的C教程&#xff0c;那么第一节课都会让我们写如下的代码&#xff1a; #include<iostream>using namespace std;int main() {cout << "Hello …

DeepSeek开源周:全面革新AI基础设施技术的盛宴

在2025年2月24日至28日&#xff0c;DeepSeek举办了备受瞩目的开源周活动&#xff0c;期间连续五天发布了一系列覆盖AI基础设施全链路的核心技术项目。这些项目横跨计算优化、通信加速、并行策略、存储系统等多个关键维度&#xff0c;为AI领域的发展注入了强大的动力&#xff0c…

使用 DeepSeek 生成流程图、甘特图与思维导图:结合 Typora 和 XMind 的高效工作流

在现代工作与学习中&#xff0c;可视化工具如流程图、甘特图和思维导图能够极大地提升信息整理与表达的效率。本文将详细介绍如何使用 DeepSeek 生成 Mermaid 文本&#xff0c;结合 Typora 快速生成流程图和甘特图&#xff0c;并通过 Markdown 格式生成思维导图&#xff0c;最终…

【学术会议论文投稿】Spring Boot实战:零基础打造你的Web应用新纪元

第七届人文教育与社会科学国际学术会议&#xff08;ICHESS 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看&#xff1a;https://ais.cn/u/nuyAF3 目录 一、Spring Boot简介 1.1 Spring Boot的诞生背景 1.2 Spring Boot的核心特性 二、搭建开发环境 2.1…