结果的数据定义由以下元素组成
- 列元数据:列名及其类型。这可以自动或手动定义。 
- 数据:结果的记录。 
data 中定义的第一个字典用于自动确定列元数据。此字典包括以下内容
- 名称:由字典中的每个键定义。 
- 类型:每个键的值。 
结果元数据的自动定义具有以下限制
- 您无法定义用于每列的数据类型。 
- 您无法定义结果中的列顺序。 
- 名称和类型是唯一可用的列元数据。 
结果中的列类型和值表示按语言支持进行映射
表 10.2 JavaScript 列和结果值类型映射
| JavaScript 值 | 默认列类型 | 结果值类型 | 
|---|---|---|
| 
                 | 
                 | 
                 | 
| 
                 | 
                 | 
                 | 
| 
                 | 
                 | 
                 | 
| 
                 | 
                 | 
                 | 
| 
                 | 
                 | 0 或 1 | 
| 
                 | 
                 | 
                 | 
| 
                 | 
                 | 
                 | 
| 
                 | 
                 | 
                 | 
| 
                 | DATETIME | 
                 | 
表 10.3 Python 列和结果值类型映射
| Python 值 | 默认列类型 | 结果值类型 | 
|---|---|---|
| 
                 | 
                 | 
                 | 
| 
                 | 
                 | 
                 | 
| 
                 | 
                 | 
                 | 
| 
                 | 
                 | 
                 | 
| 
                 | 
                 | 0 或 1 | 
| 
                 | 
                 | 
                 | 
| 
                 | 
                 | 
                 | 
| 
                 | 
                 | 
                 | 
| 
                 | 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:(可选)列值的预期类型。允许的值为- string、- integer、- float、- json、- date、- time、- datetime和- bytes
- flags:(可选)其他标志的逗号分隔列表(字符串)。- blob、- timestamp、- unsigned、- zerofill、- binary、- enum和- set。
- 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)