MySQL Shell 8.4  /  ...  /  執行 MySQL Shell 報表

10.1.5 執行 MySQL Shell 報表

已向 MySQL Shell 註冊的內建報表和使用者定義報表可以使用 \show\watch 命令在任何互動式 MySQL Shell 模式 (JavaScript、Python 或 SQL) 中執行,或者使用 JavaScript 或 Python 指令碼中的 shell.reports 物件來呼叫。\show 命令或沒有參數的 \watch 命令會列出所有可用的內建報表和使用者定義報表。

使用 Show 和 Watch 命令

若要使用 \show\watch 命令,必須有作用中的 MySQL 工作階段。

\show 命令會執行具名報表,該報表可以是內建的 MySQL Shell 報表,或已向 MySQL Shell 註冊的使用者定義報表。您可以指定報表支援的任何選項或額外引數。例如,下列命令會執行內建的 query 報表,該報表會將單一 SQL 陳述式作為引數

\show query show session status

報表名稱不區分大小寫,且破折號和底線字元會被視為相同。

\show 命令也提供下列標準選項

  • --vertical (或 -E) 會以垂直格式而非表格格式顯示傳回清單的報表結果。

  • --help 會顯示具名報表提供的任何說明。(或者,您可以使用 \help 命令和報表名稱,這會顯示報表功能的說明。)

標準選項和報表特定的選項會在引數之前給定。例如,下列命令會執行內建的 query 報表,並以垂直格式傳回結果

\show query --vertical show session status

\watch 命令會以與 \show 命令相同的方式執行報表,但接著會以固定間隔重新整理結果,直到您使用 Ctrl + C 取消命令為止。\watch 命令具有額外的標準選項可控制重新整理行為,如下所示

  • --interval=float (或 -i float) 指定重新整理之間要等待的秒數。預設值為 2 秒。可以指定小數秒數,最小間隔為 0.1 秒,且間隔最多可以設定為 86400 秒 (24 小時)。

    --nocls 指定在重新整理之前不清除畫面,因此仍然可以看到先前的結果。

例如,下列命令使用內建的 query 報表來顯示陳述式計數器變數,並每 0.5 秒重新整理結果

\watch query --interval=0.5 show global status like 'Com%'

引號是由命令處理常式而非伺服器直接解譯,因此如果它們在查詢中使用,則必須使用反斜線 (\) 將它們逸出。

使用 shell.reports 物件

內建的 MySQL Shell 報表和已向 MySQL Shell 註冊的使用者定義報表也可以在 shell.reports 物件中作為 API 函式存取。shell.reports 物件在 JavaScript 和 Python 模式中可用,並使用註冊期間提供的報表名稱作為函式名稱。此函式具有下列簽章

Dict report(Session session, List argv, Dict options);

其中

  • session 是要用來執行報表的 MySQL Shell 工作階段物件。

  • argv 是一個清單,其中包含傳遞至報表的額外引數的字串值。

  • options 是一個字典,其中包含與任何報表特定選項及其值對應的索引鍵名稱和值。選項的簡短形式不能與 shell.reports 物件搭配使用。

傳回值是一個字典,其中包含索引鍵 report,以及包含報表的 JSON 物件清單。對於清單類型的報表,每個清單都有一個元素,對於報表類型,有一個單一元素,對於列印類型,則沒有任何元素。

使用 shell.reports 物件時,如果存在選項字典,則即使沒有額外引數,也需要 argv 清單。使用 \help report_name 命令來顯示報表函式的說明,並檢查報表是否需要任何引數或選項。

例如,下列程式碼會執行名為 sessions 的使用者定義報表,該報表會顯示目前存在的工作階段。會建立一個 MySQL Shell 工作階段物件來執行報表。使用報表特定的選項,將傳回的列數限制為 10。沒有額外的引數,因此 argv 清單存在,但為空。

report = shell.reports.sessions(shell.getSession(), [], {'limit':10});