跳轉到

MySQL 任務

這頁能幫你做什麼

MySQL 任務讓你在工作流程 (Workflow) 的某個步驟,直接對 MySQL 資料庫下 SQL 指令,把查到的資料帶進後續步驟使用。常見情境:

  • 依使用者輸入查訂單、客戶、庫存或產品資料。
  • 撈出資料庫裡的事實資訊,餵給後面的大型語言模型 (LLM) 當依據,讓回答有所本。
  • 依工作流程的處理結果更新資料表(如更新訂單狀態)或新增一筆記錄。

開始前

這個任務需要一個 MySQL 類型的連結器 (Connector),裡面存放資料庫的連線資訊(主機、帳號、密碼等)。請先到 Connector 資源頁 建立好,再回到這裡選用。連線敏感資訊集中放在連結器裡較安全,不要寫在 SQL 裡。若你打開「連結器」對話框時清單是空的,代表還沒有任何 MySQL 連結器,需先建立一個(需相應權限)才能繼續。

操作步驟

  1. 在工作流程編輯器中新增一個 MySQL 任務節點,點選它開啟右側設定表單。

    MySQL 任務設定面板

  2. 在「名稱」填一個好辨識的步驟名稱。

  3. 在「連結器」點開後會跳出資源選擇對話框(含搜尋框、連結器清單與「+」(新增)圖示鈕),從中選擇前面建好的 MySQL 連結器。連結器欄位也支援 JSONPath 動態輸入開關,可改由工作流程輸入帶入連結器。

    點「連結器」後跳出的資源選擇對話框

  4. 在「資料庫」填要查詢的資料庫名稱。

  5. 在「SQL 查詢」編輯器寫下 SQL 指令,需要動態帶值的地方用佔位符(見下方說明)。
  6. 若 SQL 有佔位符,直接在「SQL 參數」鍵值表格逐列填入名稱與值(按「+」新增列)。
  7. 設定「下一個狀態」,視需要填「附註」。
  8. 用表單上方的測試按鈕()試跑,確認回傳的資料符合預期。

完整欄位說明

下表只列 MySQL 任務特有的欄位。名稱、附註、下一個狀態、輸入與輸出、錯誤處理、進階/執行設定等所有任務共用的分區,請見 Action 通用設定

欄位 必填 預設 說明
連結器 選擇要連線的 MySQL 連結器資源;點開後會跳出資源選擇對話框(含搜尋框、清單與「+」(新增)圖示鈕),只會列出 MySQL 類型的連結器。連線資訊由連結器提供,不在此重填。此欄位支援 JSONPath 動態輸入開關,可切換成從工作流程輸入動態帶入連結器。建立方式見 Connector 資源頁
資料庫 要對哪一個資料庫執行查詢,填資料庫名稱(如 customers_db)。可改用工作流程輸入動態帶入。
SQL 查詢 要執行的 SQL 指令,支援 SELECT、INSERT、UPDATE、DELETE。需要動態帶值的地方請用佔位符,不要直接把變數串進字串(避免 SQL Injection)。支援兩種佔位符寫法(見下方說明)。
SQL 參數 對應 SQL 查詢中佔位符的實際值,以常駐的鍵值表格逐列填入名稱與值(按「+」新增列),非摺疊區。寫法須與佔位符對應(見下方說明)。

SQL 佔位符與參數寫法

SQL 查詢支援兩種佔位符,「SQL 參數」的格式必須與你採用的佔位符一致:

  • 位置佔位符 %s:參數值要用「陣列(列表)」,依序對應,例如查詢 ... WHERE id = %s AND status = %s 搭配參數 [123, "active"]
  • 具名佔位符 %(param_name)s:參數值要用「物件(字典)」,依名稱對應,例如查詢 ... WHERE id = %(user_id)s 搭配參數 { "user_id": 123 }

參數值可以是固定值,也可以用 JSONPath($. 開頭)從工作流程輸入動態帶入,例如 { "user_id": "$.user_id" }(路徑寫法見 JSONPath 語法)。

務必用參數,不要字串串接

安全寫法:WHERE id = %s 搭配參數 [123]。 危險寫法:把使用者輸入直接拼進 SQL(容易遭受 SQL Injection 攻擊)。

實際範例與預期結果

設定內容(採用位置佔位符):

  • 連結器:選一個 MySQL 連結器
  • 資料庫:customers_db
  • SQL 查詢:SELECT id, name, email FROM users WHERE id = %s AND status = %s
  • SQL 參數:["$.user_id", "active"]

工作流程輸入:

{
  "user_id": 12345
}

SELECT 查詢的測試輸出:

{
  "errors": null,
  "action_type": "mysql_action",
  "rows": [
    {
      "id": 12345,
      "name": "Alice Chen",
      "email": "alice@example.com"
    }
  ],
  "num_affected_rows": 1
}

UPDATE/INSERT 等不回傳資料列的指令,rows 會是空陣列,num_affected_rows 為受影響的列數:

{
  "errors": null,
  "action_type": "mysql_action",
  "rows": [],
  "num_affected_rows": 1
}

Note

輸出欄位以後端實際回傳為準:rows 為查詢回傳的資料列陣列,num_affected_rows 為受影響的列數,action_type 固定為 mysql_action。在後續步驟可用 JSONPath 取值,例如 $.rows[0].email

下一步