news 2026/9/13 1:12:25

ToolJet 接入 MariaDB 数据源:连接配置、CRUD 查询与源码级实现解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ToolJet 接入 MariaDB 数据源:连接配置、CRUD 查询与源码级实现解析

ToolJet 接入 MariaDB 数据源:连接配置、CRUD 查询与源码级实现解析

【免费下载链接】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

MariaDB 是 MySQL 生态中最流行的兼容分支,ToolJet 内置了对自建与云端 MariaDB 服务器的完整支持,可用来读写数据、驱动内部工具与数据看板。本文将基于 ToolJet 3.0.0-LTS 文档体系,完整讲解 MariaDB 数据源的连接参数、SSL/SSH 安全选项、SQL 与图形化查询方式,并结合仓库中 MariaDB 插件源码(plugins/packages/mariadb/lib/index.ts)剖析其连接池、事务保护与批量写入的底层实现,帮助你既会用、又知其所以然。

连接 MariaDB 数据源

在 ToolJet 中建立 MariaDB 全局数据源(global datasource)有两种入口:

  1. 在查询面板(query panel)点击+ Add new global datasource按钮;
  2. 从 ToolJet 仪表盘进入 Global Datasources(即文档 />

    源码视角:连接是如何建立的

    要理解上述参数的真实作用,可以追踪插件源码中的连接建立链路。MariaDB 插件基于mariadb驱动(^3.2.3,见 plugins/packages/mariadb/package.json),核心实现集中在 plugins/packages/mariadb/lib/index.ts。

    连接池配置buildConnectionPool())关键点包括:

    • 使用mariadb.createPool()创建连接池,connectionLimit取自表单,缺省为10
    • namedPlaceholders: true开启命名占位符,支持:name形式参数绑定;
    • multipleStatements: true允许多语句执行;
    • connectTimeout: 60000(60 秒连接超时);
    • 连接会按数据源配置哈希缓存复用:getCachedConnection/cacheConnectionWithConfiguration配合dataSourceId + optionsHash作为缓存键,数据源更新后自动失效重建。

    SSH 隧道实现createSSHStream())使用ssh2客户端建立forwardOut端口转发,将本地流量转发到 MariaDB 的 host:port;连接配置的stream回调将 SSH 通道作为 socket 传给驱动。SSH 连接设置了readyTimeout: 20000keepaliveInterval: 10000,并支持密码与私钥两种认证。若数据库在私有网络,这是推荐的接入方式。

    连接测试testConnection())会执行SELECT 1 as val验证连通性,失败时返回QueryError并携带驱动报错信息。GUI 模式的表/列选择器则通过查询information_schema.TABLESinformation_schema.COLUMNS动态获取元数据(invokeMethod中的listTables/listColumns)。

    在 ToolJet 中查询 MariaDB

    连接成功后,按以下步骤编写查询:

    1. 点击+ Add按钮打开可用数据源列表;
    2. 在全局数据源区域选择MariaDB
    3. 在编辑器中输入 SQL 查询;
    4. 点击Preview预览查询返回的数据,或点击Run执行查询。

    :::tip 查询结果可以通过 Transformation(数据转换)进一步处理。详细用法请参阅 transformations.md。 :::

    CRUD 查询完整示例

    假设存在一个名为customers的 MariaDB 数据库,我们先在其中创建一张users表,包含以下列:

    • id(integer,自增)
    • name(varchar)
    • age(integer)
    • email(varchar)
    CREATE TABLE user( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT, email VARCHAR(100) );

    上述命令会在customers数据库中创建users表。接下来逐一演示针对该表的增删改查命令。

    创建(Insert)

    插入单个用户:

    INSERT INTO user (name, age, email) VALUES ('John Doe', 25, 'john@example.com');

    批量插入多个用户:

    INSERT INTO user (name, age, email) VALUES ('John Doe', 25, 'john@example.com'), ('Jane Smith', 30, 'jane@example.com'), ('Bob Johnson', 35, 'bob@example.com');

    读取(Select)

    查询所有用户:

    SELECT * FROM user;

    只查询指定列:

    SELECT name, age, email FROM user;

    为查询添加条件与过滤:

    SELECT name, age, email FROM user WHERE age > 25;

    更新(Update)

    更新指定用户的年龄:

    UPDATE user SET age = 26 WHERE id = 1;

    删除(Delete)

    删除指定用户:

    DELETE FROM user WHERE id = 1;

    实际使用中请根据具体需求调整取值与条件。以上命令覆盖了建表、插入、查询、更新与删除的完整流程。

    SQL 模式与 GUI 模式的底层行为

    执行查询时,插件会根据queryOptions.mode分发到两种处理路径(index.ts):

    SQL 模式(sql:直接执行编辑器中的 SQL。query_params会过滤空键后以命名占位符方式绑定参数,从底层防止 SQL 注入;返回结果会经过toJson()序列化,其中bigint类型会被转换为数字字符串,避免精度丢失。

    GUI 模式(gui:不手写 SQL,而是通过可视化操作生成查询。插件基于createQueryBuilder('mariadb')构建语句——在 plugins/packages/common/lib/queryBuilder.ts 中,MariaDBDialect继承自MySQLDialect,使用反引号`引用标识符、LIMIT/OFFSET分页,并支持eq/neq/gt/gte/lt/lte/like/in/not_in/between等操作符与sum/count/avg/min/max聚合函数。GUI 模式支持以下操作:

    操作说明
    list_rows查询列表,支持 where 过滤、排序、聚合与分组、limit/offset 分页
    create_row新增单行,返回insertId
    update_rows更新行,基于过滤条件匹配
    upsert_rows按主键更新或插入
    delete_rows删除行,支持 limit 限制
    bulk_insert批量插入多条记录
    bulk_update_pkey/bulk_upsert_pkey按主键批量更新 / 批量 upsert

    其中批量操作会按“每语句 65,000 个绑定参数上限”自动计算批次大小(computeBatchSize结合PARAM_THRESHOLD = 65_000),将大批量记录拆分为多个批次并在同一事务中执行,保证原子性。

    写操作的安全保护

    源码在 GUI 模式中内置了多重防误操作机制(index.ts):

    • update_rows必须至少提供一个过滤条件(where_filters),否则直接报错 "Update rows requires at least one filter condition.";
    • delete_rows必须提供过滤条件或 limit,防止误删全表;
    • 当“允许更新/删除多行”(allow_multiple_updates)关闭时,若语句匹配超过一行,事务会回滚并报错;
    • 当“零记录视为成功”(zero_records_as_success)关闭时,若影响行数为 0,同样回滚报错;
    • 所有写操作均在beginTransaction/commit/rollback包裹的事务中执行,确保数据一致性。

    这些保护同样适用于 SQL 模式之外的图形化操作,是生产环境安全使用数据库的关键设计。

    故障排查建议

    如果 MariaDB 数据源连接遇到问题,可以按顺序尝试以下步骤:

    • 确认 MariaDB 服务器正在运行,并且 ToolJet 服务器可以访问到它;
    • 核对凭据的拼写与大小写(用户名、密码、库名均区分大小写);
    • 尝试重启 ToolJet 服务器。

    如果问题依旧,可以在 GUI 模式的连接表单中先使用Test Connection(源码中执行SELECT 1验证),观察返回的错误信息;若为网络问题,检查 ToolJet 与数据库之间的防火墙、端口(默认 3306)可达性;若启用了 SSL/SSH,还需逐一确认证书内容、SSH 认证方式与目标地址是否正确。

    相关资源

    • 数据源总览与全局数据源管理:data-sources/overview.md
    • 查询结果数据转换指南:tutorial/transformations.md
    • 插件核心实现:plugins/packages/mariadb/lib/index.ts
    • 连接参数清单与表单约束:plugins/packages/mariadb/lib/manifest.json
    • 查询类型定义:plugins/packages/mariadb/lib/types.ts
    • 多方言 SQL 构建器(含MariaDBDialect):plugins/packages/common/lib/queryBuilder.ts

    【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 1:12:15

基于PyTorch的强化学习入门:从环境搭建到DQN实现

简介:这是一份基于PyTorch的强化学习动手实践系列资源,面向希望从代码层面理解RL算法的初学者与进阶者。内容聚焦DQN、DDPG两类经典算法,并结合OpenAI Gym中的CartPole-v0、Pendulum-v0等标准环境展示落地实现,涵盖从马尔可夫决策…

作者头像 李华
网站建设 2026/9/13 1:11:47

Boss直聘数据分析实战:薪资解析与投递量预测全流程

简介:面向求职市场数据分析与期末作业参考的实战案例包,以 Boss 直聘招聘数据为对象,完整覆盖数据获取、预处理、探索性分析与机器学习建模等环节。压缩包约 12.51MB,包含 Data-Analysis-Project-master 项目文件夹,内…

作者头像 李华
网站建设 2026/9/13 0:44:50

WiFi温湿度传感器MQTT接入故障排查与实战配置指南

1. 项目概述:为什么一个WiFi温湿度传感器的配置,值得花一整篇干货来写?你手头刚拆开一个标着“WiFi温湿度传感器”的小盒子,背面贴着DHT22或SHT30的标签,说明书里印着“支持MQTT”、“兼容2.4GHz WiFi”,但…

作者头像 李华
网站建设 2026/9/13 0:27:06

8款主流AI论文平台横向实测,本硕博论文避坑全攻略

前言:AI 写论文乱象频发,实测 8 款工具理清适配边界 每到毕业季,本科生、硕博生都会集中寻找 AI 论文辅助工具,市面各类写作软件层出不穷,但普遍存在几类硬伤:虚假参考文献、无法匹配本校格式、不支持公式代…

作者头像 李华