Source code for pystratum_mysql.helper.MySqlDataTypeHelper

from typing import Any, Dict

from pystratum_common.helper.DataTypeHelper import DataTypeHelper


[docs]class MySqlDataTypeHelper(DataTypeHelper): """ Utility class for deriving information based on a MySQL data type. """ # ------------------------------------------------------------------------------------------------------------------
[docs] def column_type_to_python_type(self, data_type_info: Dict[str, Any]) -> str: """ Returns the corresponding Python data type of a MySQL data type. :param dict data_type_info: The MySQL data type metadata. :rtype: str """ if data_type_info['data_type'] in ['tinyint', 'smallint', 'mediumint', 'int', 'bigint', 'year', 'bit']: return 'int' if data_type_info['data_type'] == 'decimal': return 'int' if data_type_info['numeric_scale'] == 0 else 'float' if data_type_info['data_type'] in ['float', 'double']: return 'float' if data_type_info['data_type'] in ['char', 'varchar', 'time', 'timestamp', 'date', 'datetime', 'enum', 'set', 'tinytext', 'text', 'mediumtext', 'longtext']: return 'str' if data_type_info['data_type'] in ['varbinary', 'binary', 'tinyblob', 'blob', 'mediumblob', 'longblob', ]: return 'bytes' raise RuntimeError('Unknown data type {0}'.format(data_type_info['data_type']))
# ------------------------------------------------------------------------------------------------------------------
[docs] def column_type_to_python_type_hint(self, data_type_info: Dict[str, Any]) -> str: """ Returns the corresponding Python data type hinting of a MySQL data type. :param dict data_type_info: The MySQL data type metadata. :rtype: str """ if data_type_info['data_type'] in ['tinyint', 'smallint', 'mediumint', 'int', 'bigint', 'year', 'bit']: return 'Optional[int]' if data_type_info['data_type'] == 'decimal': return 'Optional[int]' if data_type_info['numeric_scale'] == 0 else 'Optional[float]' if data_type_info['data_type'] in ['float', 'double']: return 'Optional[float]' if data_type_info['data_type'] in ['char', 'varchar', 'time', 'timestamp', 'date', 'datetime', 'enum', 'set', 'tinytext', 'text', 'mediumtext', 'longtext']: return 'Optional[str]' if data_type_info['data_type'] in ['varbinary', 'binary', 'tinyblob', 'blob', 'mediumblob', 'longblob', ]: return 'Optional[bytes]' raise RuntimeError('Unknown data type {0}'.format(data_type_info['data_type']))
# ----------------------------------------------------------------------------------------------------------------------