ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ToolJet 3.0 LTS Run Python Code 数据源实战:用 Python 驱动组件动作、查询触发与数据转换

ToolJet 3.0 LTS Run Python Code 数据源实战:用 Python 驱动组件动作、查询触发与数据转换 ToolJet 3.0 LTS Run Python Code 数据源实战用 Python 驱动组件动作、查询触发与数据转换【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet在 ToolJet 中Run Python Code是一种特殊的数据源数据源类型为runpy允许你直接在查询中编写自定义 Python 代码与组件、查询和变量交互从而实现自定义业务逻辑与数据处理。读完本篇你可以掌握如何在 ToolJet 中创建 Run Python 查询、如何用 Python 触发组件专属动作如setText、如何调用并读取其他查询的结果、如何设置/读取全局变量与页面变量以及如何用 Python 对查询返回的数据做过滤与聚合转换。一、Run Python Code 是什么在哪里创建Run Python Code 是 ToolJet 内置的代码型数据源之一与 Run JavaScript 的runjs并列。它的使用场景是当内置动作、表达式或转换无法满足需求时用一段 Python 代码直接操作组件状态、触发查询或加工数据。创建方式非常简单在查询面板Query Manager中新建一个 Query在数据源选择列表中选择Run Python code在代码编辑器中编写 Python 代码并保存查询。从仓库源码可以印证其定位前端中 Run Python 的查询编辑器由 Runpy.jsx 实现options默认值为//Type your Python code here编辑器语言固定为python数据源清单文件 Runpy.schema.json 中声明了kind: runpy并暴露isLoading、data、rawData三个变量后文读取查询数据时正是对应这三个暴露变量同时设置了disableTransformations: true——即 Run Python 查询本身不需要再挂 JS 转换代码本身就是转换逻辑在服务端runpy与restapi、runjs、tooljetdb、workflows同属静态/默认数据源种类见 DefaultDataSourceKinds 常量每个工作区存在一条对应的runpydefault数据源记录用户无需手动配置连接信息data-queries 模块说明中也将 Run Python 明确归类为针对静态数据源种类runpy的特殊查询类型。关于执行环境从前端 utils.js 中的 Pyodide 加载逻辑window.loadPyodide({ indexURL: process.env.PYODIDE_BASE_URL })可以推断Python 代码是在浏览器端通过 Pyodide 沙箱内运行的因此不依赖服务端额外的 Python 运行时但也由此带来了能力边界——官方文档明确目前 Run Python code 仅支持 Python 标准库无法import第三方包。二、用 Python 触发组件专属动作Component Specific ActionsRun Python 最核心的能力之一是在查询中直接调用组件的专属动作Component Specific Actions来改变组件状态。下面是一个完整示例用 Python 查询给一个 Text 组件设置文本。操作步骤在画布上拖入一个Text组件本例中组件名为text1我们将用 Python 查询设置它的文本新建一个查询在数据源中选择Run Python code在代码编辑器中粘贴以下代码并保存查询class Person: def __init__(self, name, age): self.name name self.age age def myfunc(self): return Hello my name is self.name p1 Person(tj_globals.currentUser.firstName, 36) components.text1.setText(p1.myfunc())代码解读定义了一个Person类myfunc方法返回问候字符串实例化时通过全局对象tj_globals.currentUser.firstName获取当前登录用户的名字——tj_globals是 ToolJet 暴露给代码环境的全局上下文其中包含当前用户等运行时信息最后一行components.text1.setText(...)通过components全局对象拿到名为text1的组件调用其专属动作setText把 Python 代码的计算结果写入组件。这正是组件专属动作的典型用法Python 查询负责算出值组件动作负责落到界面上。更多组件动作的用法可参考仓库内的组件专属动作文档。三、用 Python 触发查询Run Queries在一个 Python 查询中可以触发Run应用里的其他查询。ToolJet 提供了两种等价写法写法一通过actions.runQueryactions.runQuery(getSalesData) #replace getSalesData with your query name写法二通过queries命名空间推荐便于链式读取结果queries.getSalesData.run() #replace getSalesData with your query name两种写法中的getSalesData都替换为你实际的查询名。runQuery只是触发一次执行如果你还需要拿到执行结果应使用下节的await ... run()配合读取方法。四、获取查询数据Get Query Data触发查询后可以立即访问其返回的数据、原始数据和加载状态。三个读取方法正好对应 Run Python 数据源 Schema 中暴露的data、rawData、isLoading变量见 Runpy.schema.json。4.1 触发查询并获取处理后的数据getDataawait queries.getSalesData.run() #replace getSalesData with your query name value queries.getSalesData.getData() #replace getSalesData with your query name valuegetData()返回的是经过查询自身转换逻辑处理后的最终数据以 Python 脚本的表达式返回值value作为本 Run Python 查询的输出。4.2 触发查询并获取原始数据getRawDataawait queries.getCustomerData.run() #replace getCustomerData with your query name value queries.getCustomerData.getRawData() #replace getCustomerData with your query name valuegetRawData()返回未经转换的原始响应适合需要自己重新加工数据的场景。4.3 触发查询并获取加载状态getLoadingStateawait queries.getTodos.run() #replace getTodos with your query name value queries.getTodos.getLoadingState() #replace getTodos with your query name valuegetLoadingState()返回该查询当前是否处于加载中状态可用于在 Python 逻辑里做条件判断。注意以上示例都先await queries.X.run()等待查询执行完成再调用读取方法这样能保证拿到的是刚触发这一次执行的结果而不是上一次运行的缓存。五、设置与读取变量Variables / Page VariablesRun Python 中也可以像 JavaScript 环境一样对应用变量和页面变量进行读写。5.1 设置一个变量actions.setVariable(color,blue) #replace color with your desired variable name5.2 设置后立即读取变量actions.setVariable(mode,dark) #replace mode with your desired variable name actions.getVariable(mode) #replace mode with your desired variable namesetVariable/getVariable作用于应用级跨页面变量。5.3 设置页面级变量actions.setPageVariable(version, 1) #replace version with your desired variable name5.4 设置后立即读取页面级变量actions.setPageVariable(number,1) #replace number with your desired variable name actions.getPageVariable(number) #replace number with your desired variable name页面变量只在当前页面内可见。前端对setPageVariable的实现位于 eventsSlice.js它会把键值写入对应页面的变量状态中供当前页面的组件与代码引用——这也解释了为什么页面变量要带上moduleId上下文而普通变量则是全局共享的。六、用 Python 做数据转换TransformationsRun Python code 可以用来转换查询取回的数据把过滤、聚合等逻辑写在 Python 里而不是 JS 表达式中。官方示例以 REST API 数据源为例新建一个REST API查询Method 保持GETURL 填入https://dummyjson.com/products点击Run查看返回数据预览响应结构如下products_data { products: [ {title: iPhone 9, ...}, {title: iPhone X, ...}, # Additional products... ] }6.1 提取所有商品标题遍历products列表收集每个商品的title。在 Query Editor 中启用Transformations填入return [product[title] for product in data[products]]转换代码中data是框架注入的查询返回数据变量return的值即为该查询的转换结果。6.2 按类目过滤商品只保留smartphones类目并提取标题return [product[title] for product in data[products] if product[category] smartphones]6.3 计算某类目的平均价格计算laptops类目商品的平均价格并处理空列表防止除零return sum(product[price] for product in data[products] if product[category] laptops) / len([product for product in data[products] if product[category] laptops]) if len([product for product in data[products] if product[category] laptops]) 0 else 0这里演示了 Python 在转换场景中的表达能力多条件过滤、聚合计算与边界保护都可以在一行表达式内完成最终返回一个标量结果。七、在组件中引用 Python 查询的结果Run Python 查询的返回值与其他查询一样支持通过双花括号{{}}在组件属性中引用。例如若有一个名为updatedProductInfo的 Run Python 查询你可以把{{queries.updatedProductInfo.data}}填入一个Table组件的Data属性该表格就会被 Python 查询返回的数据填充。变量命名规则是queries.查询名.data与数据源暴露的data变量一致。八、使用前提与限制结合文档与仓库代码使用 Run Python Code 时需要注意以下前提仅支持 Python 标准库由于 Python 在浏览器端沙箱Pyodide加载逻辑见 utils.js中执行不能import第三方库。涉及外部服务的能力应交给 REST API 等数据源Python 只负责加工逻辑静态数据源无需连接配置runpy属于每个工作区自动初始化的默认数据源种类DefaultDataSourceKinds应用导入/导出时也会被识别为runpydefault见 app-import-export.service.ts跨实例迁移应用时 Python 查询可以随应用一起带过去查询本身的转换被禁用Run Python 数据源的 Schema 中disableTransformations: true它的代码即转换不要再为其叠加一层转换配置更多限制细节ToolJet 文档在 Contributing Guide 的 Troubleshooting 章节提供了 RunPy 限制说明RunPy Limitations建议在生产使用前完整阅读避免踩到沙箱执行层面的边界。小结Run Python Code 让 ToolJet 的低代码画布多了一条代码后路components操作组件、queries驱动与读取查询、actions管理变量、tj_globals获取运行时上下文配合{{queries.X.data}}的引用语法可以覆盖大量 JS 表达式写起来别扭的复杂逻辑。它的执行边界是浏览器内 Python 标准库因此适合做数据转换、状态编排与轻量业务逻辑涉及重计算或第三方生态的需求仍应借助 REST API、数据库等数据源来分担。【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表