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 值 默认列类型 结果值类型

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)