资讯动态

n8n-mcp 实战:n8n Python Code 节点标准库完全指南(附 9 大模块可运行示例与缺失库变通方案)

发布时间:2026/9/13 19:25:54 来源:尧图企业网站定制
n8n-mcp 实战n8n Python Code 节点标准库完全指南附 9 大模块可运行示例与缺失库变通方案【免费下载链接】n8n-mcpA MCP for Claude Desktop / Claude Code / Windsurf / Cursor to build n8n workflows for you项目地址: https://gitcode.com/GitHub_Trending/n8/n8n-mcp导读本文以 data/skills/n8n-code-python/STANDARD_LIBRARY.md 为主体系统讲解 n8n Code 节点Python 模式中可用的 Python 标准库模块。你将掌握 n8n Python Code 节点仅有标准库、无任何第三方包这一关键边界学会用json、datetime、re、base64、hashlib、urllib.parse、math、random、statistics九个高频模块完成 JSON 解析、日期计算、正则提取、编码哈希、URL 处理与统计分析并掌握在没有requests/pandas/数据库驱动时的工程化替代方案。读完本文你可以直接在 n8n 工作流中复制运行全部示例代码。适用前提本文基于当前仓库内 n8n Code 节点 Python 模式Beta 与 Native 两种运行模式的公共子集总结。其中_input.all()、_input.first()、_json等辅助变量属于 PythonBeta模式语法自托管实例若在 Python 运行环境中额外安装了第三方包则不受无外部库限制此时以实例实际环境为准。一、先记住这条铁律没有外部库n8n Python Code 节点在默认安装下只有 Python 标准库没有任何 pip 包。这是所有 Python 编写工作的前提# 不可用 - 会抛出 ModuleNotFoundError import requests # 没有 HTTP 库 import pandas # 没有数据分析库 import numpy # 没有数值计算库 import bs4 # 没有网页解析库 import selenium # 没有浏览器自动化库 import psycopg2 # 没有数据库驱动 import pymongo # 没有 MongoDB 驱动 import sqlalchemy # 没有 ORM # 可用 - 仅标准库 import json import datetime import re import base64 import hashlib import urllib.parse import urllib.request import math import random import statistics这一限制并非 n8n 独有而是 Python 任务运行器Task Runner沙箱环境的默认行为。从源码结构看当前仓库的 MCP 服务在生成 Python Code Node 指南时也反复强调同样边界——src/mcp/tools-documentation.ts 中的getPythonCodeNodeGuide()明确写出 No external libraries (no requests, pandas, numpy)、No pip install available并在示例中固定使用_input.all()与[{json: ...}]返回格式与本文所述规则完全一致。建议95% 的场景请使用 JavaScript——n8n 的 JavaScript Code 节点内置this.helpers.httpRequest()与 Luxon 日期库能力更完整。Python 适合需要正则、哈希、统计等标准库特性的场景或你更熟悉 Python 语法时使用。自托管例外若你运行自托管 n8n 且实例的 Python 运行环境已配置特定包那么这些包可用——SKILL.md明确说明不要无脑拒绝直接使用实例中确认存在的包即可不确定时要么询问实例配置要么只写标准库代码。二、可用模块总览按优先级分三档优先级模块典型用途P1 最常用jsonJSON 解析与生成datetime日期与时间操作re正则表达式base64Base64 编解码hashlib哈希MD5、SHA256 等urllib.parseURL 解析与编码P2 较常用math数学函数random随机数生成statistics统计函数collections专用数据结构P3 偶尔用itertools迭代器工具functools高阶函数operator运算符函数化string字符串常量与模板textwrap文本换行工具下面按优先级逐一展开每个模块的可运行示例。所有代码都遵循 n8n Code 节点的返回约定必须返回[{json: {...}}]形式的列表每个元素是含json键的字典。三、模块 1json —— JSON 操作最常用几乎每个工作流都要处理 JSONjson模块是 Python Code 节点中使用频率最高的模块。3.1 解析 JSON 字符串import json # 将 JSON 字符串解析为 Python 字典 json_string {name: Alice, age: 30} data json.loads(json_string) return [{ json: { name: data[name], age: data[age], parsed: True } }]3.2 生成 JSON 字符串import json # 将 Python 字典转换为 JSON 字符串 data { users: [ {id: 1, name: Alice}, {id: 2, name: Bob} ], total: 2 } json_string json.dumps(data, indent2) return [{ json: { json_output: json_string, length: len(json_string) } }]indent2让输出可读性更好需要稳定排序时还可追加sort_keysTrue见 3.4。3.3 处理 JSON 解析错误真实场景中上游数据不一定合法务必用try/except包裹解析逻辑import json webhook_data _input.first()[json][body] json_string webhook_data.get(data, ) try: parsed json.loads(json_string) status valid error None except json.JSONDecodeError as e: parsed None status invalid error str(e) return [{ json: { status: status, data: parsed, error: error } }]这里webhook_data.get(data, )体现了标准库搭配下的安全取值习惯Webhook 节点的数据统一嵌套在[body]下且字典访问一律用.get()兜底避免KeyError。更完整的 Webhook 结构与数据访问约定可参考 DATA_ACCESS.md。3.4 美化输出Pretty Printimport json # 带缩进与键排序的格式化输出 data _input.first()[json] pretty_json json.dumps(data, indent2, sort_keysTrue) return [{ json: { formatted: pretty_json } }]四、模块 2datetime —— 日期与时间很常用日期解析、格式化与计算是工作流中的高频需求。4.1 获取当前日期时间from datetime import datetime now datetime.now() return [{ json: { timestamp: now.isoformat(), date: now.strftime(%Y-%m-%d), time: now.strftime(%H:%M:%S), formatted: now.strftime(%B %d, %Y at %I:%M %p) } }]strftime格式化指令说明指令含义示例%Y四位年份2025%m两位月份01%d两位日期15%H:%M:%S24 小时制时分秒14:30:00%I:%M %p12 小时制带 AM/PM02:30 PM%B完整月份名January%A完整星期名Wednesday4.2 解析日期字符串from datetime import datetime date_string 2025-01-15T14:30:00 dt datetime.fromisoformat(date_string) return [{ json: { year: dt.year, month: dt.month, day: dt.day, hour: dt.hour, weekday: dt.strftime(%A) } }]fromisoformat直接支持 ISO 8601 格式含 T 分隔符非常适合解析 API 返回的时间戳。4.3 日期计算timedeltafrom datetime import datetime, timedelta now datetime.now() # 计算未来/过去日期 tomorrow now timedelta(days1) yesterday now - timedelta(days1) next_week now timedelta(weeks1) one_hour_ago now - timedelta(hours1) return [{ json: { now: now.isoformat(), tomorrow: tomorrow.isoformat(), yesterday: yesterday.isoformat(), next_week: next_week.isoformat(), one_hour_ago: one_hour_ago.isoformat() } }]timedelta支持days、weeks、hours、minutes、seconds等关键字参数可自由组合。4.4 日期比较from datetime import datetime date1 datetime(2025, 1, 15) date2 datetime(2025, 1, 20) # 计算差值 diff date2 - date1 return [{ json: { days_difference: diff.days, seconds_difference: diff.total_seconds(), date1_is_earlier: date1 date2, date2_is_later: date2 date1 } }]4.5 多格式输出from datetime import datetime dt datetime.now() return [{ json: { iso: dt.isoformat(), us_format: dt.strftime(%m/%d/%Y), eu_format: dt.strftime(%d/%m/%Y), long_format: dt.strftime(%A, %B %d, %Y), time_12h: dt.strftime(%I:%M %p), time_24h: dt.strftime(%H:%M:%S) } }]五、模块 3re —— 正则表达式常用模式匹配、文本提取与格式校验都依赖re模块。5.1 匹配并提取单个结果import re text Email: aliceexample.com, Phone: 555-1234 # 提取邮箱 email_match re.search(r\b[\w.-][\w.-]\.\w\b, text) email email_match.group(0) if email_match else None # 提取电话号码 phone_match re.search(r\d{3}-\d{4}, text) phone phone_match.group(0) if phone_match else None return [{ json: { email: email, phone: phone } }]5.2 提取所有匹配import re text Tags: #python #automation #workflow #n8n # 找出所有标签 hashtags re.findall(r#(\w), text) return [{ json: { tags: hashtags, count: len(hashtags) } }]5.3 替换模式import re text Price: $99.99, Discount: $10.00 # 去掉美元符号 cleaned re.sub(r\$, , text) # 将多个空格合并为单个空格 normalized re.sub(r\s, , cleaned) return [{ json: { original: text, cleaned: cleaned, normalized: normalized } }]5.4 格式校验import re email _input.first()[json][body].get(email, ) # 邮箱校验模式 email_pattern r^[\w.-][\w.-]\.\w$ is_valid bool(re.match(email_pattern, email)) return [{ json: { email: email, valid: is_valid } }]5.5 按模式拆分import re text apple,banana;orange|grape # 按多种分隔符拆分 items re.split(r[,;|], text) # 清理空白 items [item.strip() for item in items] return [{ json: { items: items, count: len(items) } }]进阶用法提示对大量文本做批量关键词匹配时可用re.compile()预编译模式并用re.IGNORECASE忽略大小写[COMMON_PATTERNS.md](https://link.gitcode.com/i/1b8c7e8d355730f1befd41ece4e9efc9)中的正则过滤工单优先级模式就是这一技巧的生产级示例。六、模块 4base64 —— 编码/解码常用用于二进制数据编码与 API 认证头构造。6.1 字符串编码为 Base64import base64 text Hello, World! # 编码为 base64 encoded_bytes base64.b64encode(text.encode(utf-8)) encoded_string encoded_bytes.decode(utf-8) return [{ json: { original: text, encoded: encoded_string } }]注意b64encode接收并返回的是bytes因此需要显式encode(utf-8)与decode(utf-8)两个步骤。6.2 解码 Base64import base64 encoded SGVsbG8sIFdvcmxkIQ # 从 base64 解码 decoded_bytes base64.b64decode(encoded) decoded_string decoded_bytes.decode(utf-8) return [{ json: { encoded: encoded, decoded: decoded_string } }]6.3 构造 Basic Auth 请求头import base64 username admin password secret123 # 生成 Basic Auth 头 credentials f{username}:{password} encoded base64.b64encode(credentials.encode(utf-8)).decode(utf-8) auth_header fBasic {encoded} return [{ json: { authorization: auth_header } }]生成的authorization值可直接作为后续 HTTP Request 节点的请求头使用这是Python 无 requests 库场景下与 HTTP 节点配合的典型桥梁。七、模块 5hashlib —— 哈希常用生成校验和、哈希敏感数据、创建确定性 ID。7.1 MD5 哈希import hashlib text Hello, World! # 生成 MD5 哈希 md5_hash hashlib.md5(text.encode(utf-8)).hexdigest() return [{ json: { original: text, md5: md5_hash } }]7.2 SHA256 哈希更安全import hashlib data _input.first()[json][body] text data.get(password, ) # 生成 SHA256 哈希比 MD5 更安全 sha256_hash hashlib.sha256(text.encode(utf-8)).hexdigest() return [{ json: { hashed: sha256_hash } }]7.3 生成唯一 IDimport hashlib from datetime import datetime # 由多个值生成唯一 ID unique_string f{datetime.now().isoformat()}-{_json.get(user_id, unknown)} unique_id hashlib.sha256(unique_string.encode(utf-8)).hexdigest()[:16] return [{ json: { id: unique_id, generated_at: datetime.now().isoformat() } }]取前 16 位十六进制字符即可获得碰撞概率很低的短 ID哈希保证同一输入永远产生同一输出适合做幂等键。八、模块 6urllib.parse —— URL 操作常用解析 URL、编码查询参数、解码字符串。8.1 解析 URLfrom urllib.parse import urlparse url https://example.com/path?keyvaluefoobar#section parsed urlparse(url) return [{ json: { scheme: parsed.scheme, # https netloc: parsed.netloc, # example.com path: parsed.path, # /path query: parsed.query, # keyvaluefoobar fragment: parsed.fragment # section } }]8.2 编码查询参数from urllib.parse import urlencode params { name: Alice Smith, email: aliceexample.com, message: Hello, World! } # 将参数编码为查询字符串 encoded urlencode(params) return [{ json: { query_string: encoded, full_url: fhttps://api.example.com/submit?{encoded} } }]urlencode会自动处理空格与特殊字符百分号编码避免手拼查询串导致的签名或解析问题。8.3 解析查询字符串from urllib.parse import parse_qs query_string nameAliceage30tagspythontagsn8n # 解析查询字符串重复键返回列表 params parse_qs(query_string) return [{ json: { name: params.get(name, [])[0], age: int(params.get(age, [0])[0]), tags: params.get(tags, []) } }]注意parse_qs的返回值是dict[str, list[str]]因此单值字段需取[0]多值字段如tags直接取整个列表。8.4 字符串 URL 编解码from urllib.parse import quote, unquote text Hello, World! 你好 # URL 编码 encoded quote(text) # URL 解码 decoded unquote(encoded) return [{ json: { original: text, encoded: encoded, decoded: decoded } }]九、模块 7math —— 数学运算较常用9.1 基础数学函数import math number 16.7 return [{ json: { ceiling: math.ceil(number), # 17 floor: math.floor(number), # 16 rounded: round(number), # 17 square_root: math.sqrt(16), # 4.0 power: math.pow(2, 3), # 8.0 absolute: math.fabs(-5.5) # 5.5 } }]9.2 三角函数import math angle_degrees 45 angle_radians math.radians(angle_degrees) return [{ json: { sine: math.sin(angle_radians), cosine: math.cos(angle_radians), tangent: math.tan(angle_radians), pi: math.pi, e: math.e } }]9.3 对数运算import math number 100 return [{ json: { log10: math.log10(number), # 2.0 natural_log: math.log(number), # 4.605... log2: math.log2(number) # 6.644... } }]十、模块 8random —— 随机数较常用10.1 随机数生成import random return [{ json: { random_float: random.random(), # 0.0 到 1.0 random_int: random.randint(1, 100), # 1 到 100 random_range: random.randrange(0, 100, 5) # 0, 5, 10, ..., 95 } }]10.2 随机选择import random colors [red, green, blue, yellow] users [{id: 1, name: Alice}, {id: 2, name: Bob}] return [{ json: { random_color: random.choice(colors), random_user: random.choice(users) } }]choice支持从任意非空序列包括对象列表中随机取一个元素。10.3 打乱列表import random items [1, 2, 3, 4, 5] shuffled items.copy() random.shuffle(shuffled) return [{ json: { original: items, shuffled: shuffled } }]务必先copy()再打乱避免破坏原列表shuffle是原地操作。10.4 随机抽样不重复import random items list(range(1, 101)) # 无放回抽取 10 个随机项 sample random.sample(items, 10) return [{ json: { sample: sample, count: len(sample) } }]十一、模块 9statistics —— 统计函数较常用11.1 基础统计import statistics numbers [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] return [{ json: { mean: statistics.mean(numbers), # 55.0 median: statistics.median(numbers), # 55.0 mode: statistics.mode([1, 2, 2, 3]), # 2 stdev: statistics.stdev(numbers), # 30.28... variance: statistics.variance(numbers) # 916.67... } }]11.2 从工作流数据聚合统计import statistics all_items _input.all() # 提取金额字段 amounts [item[json].get(amount, 0) for item in all_items] if amounts: return [{ json: { count: len(amounts), total: sum(amounts), average: statistics.mean(amounts), median: statistics.median(amounts), min: min(amounts), max: max(amounts), range: max(amounts) - min(amounts) } }] else: return [{json: {error: No data}}]这是Run Once for All Items模式下最典型的统计聚合写法先_input.all()取全量数据用列表推导提取字段再用sum/min/max/statistics计算汇总。务必对空列表做兜底if amounts:否则statistics.mean([])会抛StatisticsError。十二、缺失库的变通方案关键实战能力没有外部库不等于做不了这些事——用 n8n 原生节点 标准库组合即可。12.1 HTTP 请求无 requests# 不能使用 requests 库 # import requests # ModuleNotFoundError! # 正确做法在 Code 节点之前添加 HTTP Request 节点 # 然后在 Code 节点中读取其响应 response_data _input.first()[json] return [{ json: { status: response_data.get(status), data: response_data.get(body), processed: True } }]三种可选路径按推荐度排序HTTP Request 节点放在 Code 节点前Code 节点只做加工——推荐改用 JavaScript使用this.helpers.httpRequest()注意任务运行器沙箱中裸$helpers全局变量是 undefined须用this.helpers仅限极简场景用标准库urllib.request.urlopen无自定义头、无认证能力不推荐用于生产。12.2 数据处理无 pandas# 不能使用 pandas # import pandas as pd # ModuleNotFoundError! # 使用 Python 内建列表推导 collections 分组 all_items _input.all() # 过滤 active_items [ item for item in all_items if item[json].get(status) active ] # 分组 from collections import defaultdict grouped defaultdict(list) for item in all_items: category item[json].get(category, other) grouped[category].append(item[json]) # 聚合 import statistics amounts [item[json].get(amount, 0) for item in all_items] total sum(amounts) average statistics.mean(amounts) if amounts else 0 return [{ json: { active_count: len(active_items), grouped: dict(grouped), total: total, average: average } }]collections.defaultdict是替代 pandas 分组操作的高频数据结构更复杂的十种生产级模式多源聚合、JSON 对比、CRM 归一化、Top-N 过滤等见 COMMON_PATTERNS.md。12.3 数据库操作无驱动# 不能使用数据库驱动 # import psycopg2 # ModuleNotFoundError! # import pymongo # ModuleNotFoundError! # 使用 n8n 数据库节点Postgres/MySQL/MongoDB # 在 Code 节点之前添加对应节点然后在 Code 节点中处理结果 db_results _input.first()[json] return [{ json: { record_count: len(db_results) if isinstance(db_results, list) else 1, processed: True } }]其他替代对照需求不可用的外部库可用替代HTTP 请求requestsHTTP Request 节点 / JavaScript数据分析pandas、numpy列表推导 statistics数据库psycopg2、pymongo、sqlalchemyn8n 数据库节点网页解析bs4/beautifulsoup4HTTP Request 节点 HTML Extract 节点浏览器自动化selenium无改用 n8n 浏览器类节点或外部服务Excelopenpyxl、xlsxwriterSpreadsheet File 节点图像处理pillow外部 API 或专用节点十三、完整标准库清单可用常用jsondatetime、timerebase64hashliburllib.parse、urllib.request、urllib.errormathrandomstatisticscollectionsdefaultdict、Counter、namedtupleitertoolsfunctoolsoperatorstringtextwrap可用较少用os.path仅路径操作文件系统其余部分受限copytypingenumdecimalfractions不可用外部库requestsHTTPpandas数据分析numpy数值计算bs4/beautifulsoup4HTML 解析selenium浏览器自动化psycopg2、pymongo、sqlalchemy数据库flask、fastapiWeb 框架pillow图像处理openpyxl、xlsxwriterExcel十四、最佳实践1. 优先使用标准库# 良好使用标准库 import json import datetime import re data _input.first()[json] processed json.loads(data.get(json_string, {})) return [{json: processed}]2. 需要外部能力时回退到 n8n 节点需要外部库的操作一律交给 n8n 原生节点完成Code 节点只做加工HTTP 请求 →HTTP Request节点数据库 →Postgres / MySQL / MongoDB节点文件解析 →Extract from File节点result _input.first()[json] return [{json: {processed: result}}]3. 组合多个模块完成复杂操作import json import base64 import hashlib from datetime import datetime # 组合模块处理复杂操作 data _input.first()[json][body] # 哈希敏感数据脱敏生成稳定 ID user_id hashlib.sha256(data.get(email, ).encode()).hexdigest()[:16] # 编码存储 encoded_data base64.b64encode(json.dumps(data).encode()).decode() return [{ json: { user_id: user_id, encoded_data: encoded_data, timestamp: datetime.now().isoformat() } }]4. 贯穿始终的安全编码习惯结合 ERROR_PATTERNS.md 中总结的 n8n Python Code 节点五大高频错误编写时请自检错误规避方式ModuleNotFoundError只用标准库必要时改用 JavaScript 或 n8n 节点空代码 / 缺少 return每个代码路径都以return [{json: ...}]结尾KeyError字典访问一律data.get(key, 默认值)IndexError先if items:或len(items) n再索引或用切片items[:n]返回格式错误始终返回[{json: {...}}]列表禁止裸字典/裸列表/None/字符串十五、快速参考速查表浓缩版最常用标准库调用可直接复制# JSON 操作 import json data json.loads(json_string) json_output json.dumps({key: value}) # 日期时间 from datetime import datetime, timedelta now datetime.now() tomorrow now timedelta(days1) formatted now.strftime(%Y-%m-%d) # 正则表达式 import re matches re.findall(r\d, text) cleaned re.sub(r[^\w\s], , text) # Base64 编码 import base64 encoded base64.b64encode(data).decode() decoded base64.b64decode(encoded) # 哈希 import hashlib hash_value hashlib.sha256(text.encode()).hexdigest() # URL 解析 import urllib.parse params urllib.parse.urlencode({key: value}) parsed urllib.parse.urlparse(url) # 统计 from statistics import mean, median, stdev average mean([1, 2, 3, 4, 5])十六、总结最常用的六大模块json—— 解析 / 生成 JSONdatetime—— 日期操作re—— 正则表达式base64—— 编码 / 解码hashlib—— 哈希urllib.parse—— URL 操作核心边界Python Code 节点没有外部库requests、pandas、numpy等一律不可用。推荐策略95% 的场景使用JavaScript只有明确需要 Python 标准库特性正则、哈希、统计时才用 Python需要外部库的操作改用n8n 原生节点完成Code 节点专注数据加工。延伸阅读同属 n8n-code-python skill 系列SKILL.md —— Python Code 节点总览与快速开始DATA_ACCESS.md ——_input系列数据访问模式与 Webhook body 结构COMMON_PATTERNS.md —— 10 个生产级 Python 模式ERROR_PATTERNS.md —— 五大高频错误与修复清单若需在 MCP 对话中获取 Python Code 节点要点仓库内 MCP 服务也内置了同一主题的指南tools_documentation({topic: python_code_node_guide})其实现在 src/mcp/tools-documentation.ts。【免费下载链接】n8n-mcpA MCP for Claude Desktop / Claude Code / Windsurf / Cursor to build n8n workflows for you项目地址: https://gitcode.com/GitHub_Trending/n8/n8n-mcp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价