MySQL Shell 9.0  /  ...  /  結果資料規格

10.4.3 結果資料規格

結果的資料定義由以下元素組成

  • 欄位中繼資料:欄位名稱及其類型。這可以自動或手動定義。

  • 資料:結果的記錄。

自動定義的欄位資料

data 中定義的第一個字典用於自動判斷欄位中繼資料。此字典包含以下內容

  • 名稱:由字典中的每個鍵定義。

  • 類型:每個鍵的值。

注意

結果中繼資料的自動定義有以下限制

  • 您無法定義每個欄位使用的資料類型。

  • 您無法定義結果中的欄位順序。

  • 名稱和類型是唯一可用的欄位中繼資料。

結果中的欄位類型和值表示方式由語言支援對應

表 10.2 JavaScript 欄位和結果值類型對應

JavaScript 值 預設欄位類型 結果值類型

null

STRING

null

字串

STRING

字串

整數

BIGINT

整數

浮點數

DOUBLE

浮點數

布林值

TINYINT

0 或 1

陣列

JSON

字串

字典

JSON

字串

陣列緩衝區

BYTES

陣列緩衝區

日期

DATETIME

日期


表 10.3 Python 欄位和結果值類型對應

Python 值 預設欄位類型 結果值類型

None

STRING

null

字串

STRING

字串

整數

BIGINT

整數

浮點數

DOUBLE

浮點數

布林值

TINYINT

0 或 1

陣列

JSON

字串

字典

JSON

字串

二進位字串

BYTES

二進位字串

日期

DATE

日期

時間

TIME

時間

日期時間

DATETIME

日期時間


以下顯示自動欄位定義的範例

@sql_handler(prefixes=["SHOW FILES"])
def show_files(session, sql):
files = [{'path': file, 'length': os.stat(file).st_size} for file in os.listdir()]
return mysqlsh.globals.shell.create_result({'data': files})

用法

SQL> show files;
+---------+----------------+
| length  | path           |
+---------+----------------+
| 420     | sample_file.tx |
| 50      | readme.txt     |
+---------+----------------+
3 rows in set (0.0000 sec)

手動定義的欄位資料

您可以使用 columns 屬性定義中繼資料。此屬性定義欄位順序,並且可以用來覆寫預設欄位類型。

columns 定義為一個清單,其中包含定義欄位名稱的字串,或包含以下一個或多個內容的字典

  • name:(必要)結果中欄位的名稱。

  • type:(可選)欄位值的預期類型。允許的值為 stringintegerfloatjsondatetimedatetimebytes

  • flags:(可選)以逗號分隔的其他旗標清單(字串)。blobtimestampunsignedzerofillbinaryenumset

  • length:(可選)長度,以位元組為單位。

以下顯示手動欄位定義的範例

@sql_handler(prefixes=["SHOW FILES"])
def show_files(session, sql):
files = [{'path': file, 'length': os.stat(file).st_size} for file in os.listdir()]
metadata = [{'name': 'path', 'type': 'string'}, {'name': 'length', 'type': 'integer'}]
return mysqlsh.globals.shell.create_result({'columns', metadata, 'data': files})

用法

mysql-sql> show files;
+----------------+---------+
| path           | length  |
+----------------+---------+
| sample_file.tx | 420     |
| readme.txt     | 50      |
+----------------+---------+
3 rows in set (0.0000 sec)