结果的数据定义由以下元素组成
列元数据:列名及其类型。这可以自动或手动定义。
数据:结果的记录。
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)