# -*- coding: utf-8 -*- from enum import Enum from app.config.setting import settings class GenConfig: def __init__(self): pass # 作者 author: str = 'Richard' # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool packageName: str = '' # 自动去除表前缀,默认是True autoRemovePre: bool = True # 表前缀(生成类名不会包含表前缀,多个用逗号分隔) tablePrefix: str = 'system_' # 是否允许生成文件覆盖到本地(自定义路径),默认不允许 allowOverwrite: bool = False class GenConstants: """代码生成通用常量""" # 单表(增删改查) TPL_CRUD = "crud" # 树表(增删改查) TPL_TREE = "tree" # 主子表(增删改查) TPL_SUB = "sub" # 树编码字段 TREE_CODE = "treeCode" # 树父编码字段 TREE_PARENT_CODE = "treeParentCode" # 树名称字段 TREE_NAME = "treeName" # 上级菜单ID字段 PARENT_MENU_ID = "parentMenuId" # 上级菜单名称字段 PARENT_MENU_NAME = "parentMenuName" # 数据库字符串类型 TYPE_STRING = ["char", "varchar", "nvarchar", "varchar2"] # 数据库文本类型 TYPE_TEXT = ["tinytext", "text", "mediumtext", "longtext"] # 数据库时间类型 TYPE_DATE_TIME = ["datetime", "time", "date", "timestamp" ] # 数据库数字类型 TYPE_NUMBER = ["tinyint", "smallint", "mediumint", "int", "number", "integer", "bigint", "float", "float", "double", "decimal"] # 页面不需要编辑字段 COLUMN_NAME_NOT_EDIT = ["id", "create_by", "dept_id", "create_time", "del_flag", "update_time"] # 页面不需要显示的列表字段 COLUMN_NAME_NOT_LIST = ["id", "create_by", "dept_id", "create_time", "del_flag", "update_by"] # 页面不需要查询字段 COLUMN_NAME_NOT_QUERY = ["id", "create_by", "dept_id", "create_time", "del_flag", "update_by", "update_time", "remark"] # Dao基类字段 DAO_COLUMN_NOT_EDIT = ["create_by", "dept_id", "create_time", "del_flag", "update_time"] # Entity基类字段 BASE_ENTITY = ['id', 'create_time', 'update_time', "create_by", "dept_id", 'del_flag'] # Tree基类字段 TREE_ENTITY = ["parentName", "parentId", "orderNum", "ancestors"] # 文本框 HTML_INPUT = "input" # 文本域 HTML_TEXTAREA = "textarea" # 下拉框 HTML_SELECT = "select" # 单选框 HTML_RADIO = "radio" # 复选框 HTML_CHECKBOX = "checkbox" # 日期控件 HTML_DATETIME = "datetime" # 图片上传控件 HTML_IMAGE_UPLOAD = "imageUpload" # 文件上传控件 HTML_FILE_UPLOAD = "fileUpload" # 富文本控件 HTML_EDITOR = "editor" # 模糊查询 QUERY_LIKE = "LIKE" # 相等查询 QUERY_EQ = "EQ" # 需要 REQUIRE = "1" # MySQL -> SQLAlchemy 类型映射 MYSQL_TO_SQLALCHEMY = { # Numeric Types "TINYINT": "SmallInteger", "SMALLINT": "SmallInteger", "MEDIUMINT": "Integer", "INT": "Integer", "INTEGER": "Integer", "BIGINT": "BigInteger", "FLOAT": "Float", "DOUBLE": "Float", "DECIMAL": "Numeric", "NUMERIC": "Numeric", # String Types "CHAR": "String", "VARCHAR": "String", "TEXT": "Text", "TINYTEXT": "Text", "MEDIUMTEXT": "Text", "LONGTEXT": "Text", "BLOB": "LargeBinary", "TINYBLOB": "LargeBinary", "MEDIUMBLOB": "LargeBinary", "LONGBLOB": "LargeBinary", # Date and Time Types "DATE": "Date", "DATETIME": "DateTime", "TIMESTAMP": "DateTime", "TIME": "Time", "YEAR": "Integer", # MySQL YEAR type is commonly represented as Integer in SQLAlchemy # Binary Types "BINARY": "Binary", "VARBINARY": "Binary", # Enum and Set Types "ENUM": "Enum", "SET": "Enum", # Set can be represented using Enum type in SQLAlchemy # JSON Types "JSON": "JSON", # SQLAlchemy supports JSON type from 1.3.0 version # Spatial Types (less common in typical usage) "GEOMETRY": "String", # Can be represented as String or Binary "POINT": "String", # Represented as String in SQLAlchemy "LINESTRING": "String", # Represented as String in SQLAlchemy "POLYGON": "String", # Represented as String in SQLAlchemy # Other Types "BIT": "Boolean", "BOOL": "Boolean", "UUID": "String", # UUIDs in SQLAlchemy can be represented as String "BINARY": "Binary", # MySQL BINARY type corresponds to SQLAlchemy's Binary } MYSQL_TO_PYTHON = { # 字符串类型 "VARCHAR": "str", "CHAR": "str", "TEXT": "str", "TINYTEXT": "str", "MEDIUMTEXT": "str", "LONGTEXT": "str", # 数值类型 "INT": "int", "TINYINT": "int", "SMALLINT": "int", "MEDIUMINT": "int", "BIGINT": "int", "FLOAT": "float", "DOUBLE": "float", "DECIMAL": "float", "NUMERIC": "float", "BIT": "bool", # 位字段,0 或 1 # 日期和时间类型 "DATETIME": "datetime", "TIMESTAMP": "datetime", "DATE": "datetime.date", "TIME": "datetime.time", "YEAR": "int", # 存储年份 "TINYINT UNSIGNED": "int", # 无符号小整数类型 # 布尔类型 "BOOLEAN": "bool", "BOOL": "bool", # 布尔类型,通常与 BOOLEAN 相同 # JSON 数据类型 "JSON": "dict", # JSON 数据存储为字典 # 二进制类型 "BLOB": "bytes", "TINYBLOB": "bytes", "MEDIUMBLOB": "bytes", "LONGBLOB": "bytes", # 枚举和集合类型 "ENUM": "str", # 枚举类型作为字符串 "SET": "list", # 集合类型作为列表 # 时间单位类型 "DATE": "datetime.date", # 仅日期 "TIME": "datetime.time", # 仅时间 # 大文本类型 "LONGTEXT": "str", "MEDIUMTEXT": "str", "TINYTEXT": "str", # UUID "UUID": "str", # UUID 一般作为字符串 # 用于二进制数据 "BINARY": "bytes", # 固定长度的二进制数据 "VARBINARY": "bytes", # 可变长度的二进制数据 # 其他数据类型 "GEOMETRY": "bytes", # 空间数据类型,通常存储为字节流 "POINT": "bytes", # 点数据类型 "LINESTRING": "bytes", # 线数据类型 "POLYGON": "bytes", # 多边形数据类型 "MULTIPOINT": "bytes", # 多点数据类型 "MULTILINESTRING": "bytes", # 多线数据类型 "MULTIPOLYGON": "bytes", # 多多边形数据类型 "GEOMETRYCOLLECTION": "bytes", # 几何集合类型 } class RET(Enum): """ 系统返回码枚举 0~200: 成功状态码 400~600: HTTP标准错误码 4000+: 自定义业务错误码 """ # 成功状态码 OK = (0, "成功") SUCCESS = (200, "操作成功") CREATED = (201, "创建成功") ACCEPTED = (202, "请求已接受") NO_CONTENT = (204, "操作成功,无返回数据") # HTTP标准错误码 ERROR = (1, "请求错误") BAD_REQUEST = (400, "参数错误") UNAUTHORIZED = (401, "未授权") FORBIDDEN = (403, "访问受限") NOT_FOUND = (404, "资源不存在") BAD_METHOD = (405, "不支持的请求方法") NOT_ACCEPTABLE = (406, "不接受的请求") CONFLICT = (409, "资源冲突") GONE = (410, "资源已删除") PRECONDITION_FAILED = (412, "前提条件失败") UNSUPPORTED_MEDIA_TYPE = (415, "不支持的媒体类型") UNPROCESSABLE_ENTITY = (422, "无法处理的实体") TOO_MANY_REQUESTS = (429, "请求过于频繁") # 服务器错误码 INTERNAL_SERVER_ERROR = (500, "服务器内部错误") NOT_IMPLEMENTED = (501, "功能未实现") BAD_GATEWAY = (502, "网关错误") SERVICE_UNAVAILABLE = (503, "服务不可用") GATEWAY_TIMEOUT = (504, "网关超时") HTTP_VERSION_NOT_SUPPORTED = (505, "HTTP版本不支持") # 自定义业务错误码 EXCEPTION = (-1, "系统异常") DATAEXIST = (4003, "数据已存在") DATAERR = (4004, "数据错误") PARAMERR = (4103, "参数错误") IOERR = (4302, "IO错误") SERVERERR = (4500, "服务错误") UNKOWNERR = (4501, "未知错误") TIMEOUT = (4502, "请求超时") RATE_LIMIT_EXCEEDED = (4503, "访问频率超限") # Token相关错误码 INVALID_TOKEN = (4504, "无效令牌") EXPIRED_TOKEN = (4505, "令牌过期") # 认证授权错误码 INVALID_CREDENTIALS = (4506, "无效凭证") INVALID_REQUEST = (4507, "无效请求") INVALID_FORMAT = (4508, "格式错误") INVALID_INPUT = (4509, "输入错误") INVALID_STATE = (4510, "状态错误") INVALID_OPERATION = (4511, "操作错误") INVALID_PERMISSION = (4512, "权限错误") INVALID_RESOURCE = (4513, "资源错误") INVALID_CONFIGURATION = (4514, "配置错误") # 会话安全错误码 INVALID_SESSION = (4515, "会话错误") INVALID_LICENSE = (4516, "许可证错误") INVALID_CERTIFICATE = (4517, "证书错误") INVALID_SIGNATURE = (4518, "签名错误") INVALID_ENCRYPTION = (4519, "加密错误") INVALID_DECRYPTION = (4520, "解密错误") INVALID_COMPRESSION = (4521, "压缩错误") INVALID_DECOMPRESSION = (4522, "解压错误") # 权限相关错误码 INVALID_AUTHENTICATION = (4523, "认证错误") INVALID_AUTHORIZATION = (4524, "授权错误") INVALID_ACCESS = (4525, "访问错误") INVALID_SECURITY = (4526, "安全错误") # 系统组件错误码 INVALID_NETWORK = (4527, "网络错误") INVALID_DATABASE = (4528, "数据库错误") INVALID_CACHE = (4529, "缓存错误") INVALID_QUEUE = (4530, "队列错误") INVALID_LOCK = (4531, "锁错误") INVALID_TRANSACTION = (4532, "事务错误") INVALID_LOG = (4533, "日志错误") INVALID_MONITORING = (4534, "监控错误") INVALID_NOTIFICATION = (4535, "通知错误") # 任务调度错误码 INVALID_SCHEDULING = (4536, "调度错误") INVALID_TASK = (4537, "任务错误") INVALID_JOB = (4538, "作业错误") INVALID_WORKFLOW = (4539, "工作流错误") # 开发相关错误码 INVALID_SCRIPT = (4540, "脚本错误") INVALID_PLUGIN = (4541, "插件错误") INVALID_MODULE = (4542, "模块错误") INVALID_PACKAGE = (4543, "包错误") INVALID_CLASS = (4544, "类错误") INVALID_FUNCTION = (4545, "函数错误") INVALID_METHOD = (4546, "方法错误") INVALID_PROPERTY = (4547, "属性错误") INVALID_VARIABLE = (4548, "变量错误") INVALID_CONSTANT = (4549, "常量错误") INVALID_ENUM = (4550, "枚举错误") INVALID_INTERFACE = (4551, "接口错误") INVALID_PROTOCOL = (4552, "协议错误") # 服务相关错误码 INVALID_SERVICE = (4553, "服务错误") INVALID_CLIENT = (4554, "客户端错误") INVALID_SERVER = (4555, "服务器错误") INVALID_SYSTEM = (4556, "系统错误") # 用户权限错误码 INVALID_USER = (4557, "用户错误") INVALID_GROUP = (4558, "用户组错误") INVALID_ROLE = (4559, "角色错误") INVALID_PERMISSION_GROUP = (4560, "权限组错误") INVALID_PERMISSION_ROLE = (4561, "权限角色错误") INVALID_PERMISSION_USER = (4562, "权限用户错误") INVALID_PERMISSION_RESOURCE = (4563, "权限资源错误") INVALID_PERMISSION_ACTION = (4564, "权限操作错误") INVALID_PERMISSION_SCOPE = (4565, "权限范围错误") INVALID_PERMISSION_LEVEL = (4566, "权限级别错误") INVALID_PERMISSION_TYPE = (4567, "权限类型错误") INVALID_PERMISSION_STATUS = (4568, "权限状态错误") INVALID_PERMISSION_TIME = (4569, "权限时间错误") INVALID_PERMISSION_CONDITION = (4570, "权限条件错误") INVALID_PERMISSION_POLICY = (4571, "权限策略错误") INVALID_PERMISSION_RULE = (4572, "权限规则错误") INVALID_PERMISSION_EXCEPTION = (4573, "权限异常错误") INVALID_PERMISSION_VALIDATION = (4574, "权限验证错误") INVALID_PERMISSION_AUTHENTICATION = (4575, "权限认证错误") INVALID_PERMISSION_AUTHORIZATION = (4576, "权限授权错误") INVALID_PERMISSION_ACCESS = (4577, "权限访问错误") INVALID_PERMISSION_SECURITY = (4578, "权限安全错误") INVALID_PERMISSION_NETWORK = (4579, "权限网络错误") INVALID_PERMISSION_DATABASE = (4580, "权限数据库错误") INVALID_PERMISSION_CACHE = (4581, "权限缓存错误") INVALID_PERMISSION_QUEUE = (4582, "权限队列错误") INVALID_PERMISSION_LOCK = (4583, "权限锁错误") INVALID_PERMISSION_TRANSACTION = (4584, "权限事务错误") INVALID_PERMISSION_LOG = (4585, "权限日志错误") INVALID_PERMISSION_MONITORING = (4586, "权限监控错误") INVALID_PERMISSION_NOTIFICATION = (4587, "权限通知错误") INVALID_PERMISSION_SCHEDULING = (4588, "权限调度错误") INVALID_PERMISSION_TASK = (4589, "权限任务错误") INVALID_PERMISSION_JOB = (4590, "权限作业错误") INVALID_PERMISSION_WORKFLOW = (4591, "权限工作流错误") INVALID_PERMISSION_SCRIPT = (4592, "权限脚本错误") INVALID_PERMISSION_PLUGIN = (4593, "权限插件错误") INVALID_PERMISSION_MODULE = (4594, "权限模块错误") INVALID_PERMISSION_PACKAGE = (4595, "权限包错误") INVALID_PERMISSION_CLASS = (4596, "权限类错误") INVALID_PERMISSION_FUNCTION = (4597, "权限函数错误") INVALID_PERMISSION_METHOD = (4598, "权限方法错误") INVALID_PERMISSION_PROPERTY = (4599, "权限属性错误") INVALID_PERMISSION_VARIABLE = (4600, "权限变量错误") INVALID_PERMISSION_CONSTANT = (4601, "权限常量错误") INVALID_PERMISSION_ENUM = (4602, "权限枚举错误") INVALID_PERMISSION_INTERFACE = (4603, "权限接口错误") INVALID_PERMISSION_PROTOCOL = (4604, "权限协议错误") INVALID_PERMISSION_SERVICE = (4605, "权限服务错误") INVALID_PERMISSION_CLIENT = (4606, "权限客户端错误") INVALID_PERMISSION_SERVER = (4607, "权限服务器错误") INVALID_PERMISSION_SYSTEM = (4608, "权限系统错误") def __init__(self, code: int, msg: str): """ 初始化返回码 :param code: 错误码 :param msg: 错误信息 """ self._code = code self._msg = msg @property def code(self) -> int: """获取错误码""" return self._code @property def msg(self) -> str: """获取错误信息""" return self._msg class CommonConstant: """ 常用常量 WWW: www主域名 HTTP: http请求 HTTPS: https请求 LOOKUP_RMI: RMI远程方法调用 LOOKUP_LDAP: LDAP远程方法调用 LOOKUP_LDAPS: LDAPS远程方法调用 YES: 是否为系统默认(是) NO: 是否为系统默认(否) DEPT_NORMAL: 部门正常状态 DEPT_DISABLE: 部门停用状态 UNIQUE: 校验是否唯一的返回标识(是) NOT_UNIQUE: 校验是否唯一的返回标识(否) """ # 域名相关 WWW = 'www.' HTTP = 'http://' HTTPS = 'https://' # 远程调用 LOOKUP_RMI = 'rmi:' LOOKUP_LDAP = 'ldap:' LOOKUP_LDAPS = 'ldaps:' # 系统标识 YES = 'Y' NO = 'N' # 部门状态 DEPT_NORMAL = '0' # 正常 DEPT_DISABLE = '1' # 停用 # 唯一性校验 UNIQUE = True NOT_UNIQUE = False class JobConstant: """ 定时任务常量 JOB_ERROR_LIST: 定时任务禁止调用模块及违规字符串列表 JOB_WHITE_LIST: 定时任务允许调用模块列表 """ JOB_ERROR_LIST = [ 'app', 'config', 'exceptions', 'import ', 'middlewares', 'module_admin', 'open(', 'os.', 'server', 'sub_applications', 'subprocess.', 'sys.', 'utils', 'while ', '__import__', '"', "'", ',', '?', ':', ';', '/', '|', '+', '-', '=', '~', '!', '#', '$', '%', '^', '&', '*', '<', '>', '(', ')', '[', ']', '{', '}', ' ', ] JOB_WHITE_LIST = ['module_task'] class MenuConstant: """ 菜单常量 TYPE_DIR: 菜单类型(目录) TYPE_MENU: 菜单类型(菜单) TYPE_BUTTON: 菜单类型(按钮) YES_FRAME: 是否菜单外链(是) NO_FRAME: 是否菜单外链(否) LAYOUT: Layout组件标识 PARENT_VIEW: ParentView组件标识 INNER_LINK: InnerLink组件标识 """ TYPE_DIR = 'M' TYPE_MENU = 'C' TYPE_BUTTON = 'F' YES_FRAME = 0 NO_FRAME = 1 LAYOUT = 'Layout' PARENT_VIEW = 'ParentView' INNER_LINK = 'InnerLink' class GenConstant: """ 代码生成常量 TPL_CRUD: 单表(增删改查 TPL_TREE: 树表(增删改查) TPL_SUB: 主子表(增删改查) TREE_CODE: 树编码字段 TREE_PARENT_CODE: 树父编码字段 TREE_NAME: 树名称字段 PARENT_MENU_ID: 上级菜单ID字段 PARENT_MENU_NAME: 上级菜单名称字段 COLUMNTYPE_STR: 数据库字符串类型 COLUMNTYPE_TEXT: 数据库文本类型 COLUMNTYPE_TIME: 数据库时间类型 COLUMNTYPE_GEOMETRY: 数据库字空间类型 COLUMNTYPE_NUMBER: 数据库数字类型 COLUMNNAME_NOT_EDIT: 页面不需要编辑字段 COLUMNNAME_NOT_LIST: 页面不需要显示的列表字段 COLUMNNAME_NOT_QUERY: 页面不需要查询字段 BASE_ENTITY: Entity基类字段 TREE_ENTITY: Tree基类字段 HTML_INPUT: 文本框 HTML_TEXTAREA: 文本域 HTML_SELECT: 下拉框 HTML_RADIO: 单选框 HTML_CHECKBOX: 复选框 HTML_DATETIME: 日期控件 HTML_IMAGE_UPLOAD: 图片上传控件 HTML_FILE_UPLOAD: 文件上传控件 HTML_EDITOR: 富文本控件 TYPE_DECIMAL: 高精度计算类型 TYPE_DATE: 时间类型 QUERY_LIKE: 模糊查询 QUERY_EQ: 相等查询 REQUIRE: 需要 DB_TO_SQLALCHEMY_TYPE_MAPPING: 数据库类型与sqlalchemy类型映射 DB_TO_PYTHON_TYPE_MAPPING: 数据库类型与python类型映射 """ TPL_CRUD = 'crud' TPL_TREE = 'tree' TPL_SUB = 'sub' TREE_CODE = 'treeCode' TREE_PARENT_CODE = 'treeParentCode' TREE_NAME = 'treeName' PARENT_MENU_ID = 'parentMenuId' PARENT_MENU_NAME = 'parentMenuName' COLUMNTYPE_STR = ( ['character varying', 'varchar', 'character', 'char'] if settings.DATABASE_TYPE == 'postgresql' else ['char', 'varchar', 'nvarchar', 'varchar2'] ) COLUMNTYPE_TEXT = ( ['text', 'citext'] if settings.DATABASE_TYPE == 'postgresql' else ['tinytext', 'text', 'mediumtext', 'longtext'] ) COLUMNTYPE_TIME = ( [ 'date', 'time', 'time with time zone', 'time without time zone', 'timestamp', 'timestamp with time zone', 'timestamp without time zone', 'interval', ] if settings.DATABASE_TYPE == 'postgresql' else ['datetime', 'time', 'date', 'timestamp'] ) COLUMNTYPE_GEOMETRY = ( ['point', 'line', 'lseg', 'box', 'path', 'polygon', 'circle'] if settings.DATABASE_TYPE == 'postgresql' else [ 'geometry', 'point', 'linestring', 'polygon', 'multipoint', 'multilinestring', 'multipolygon', 'geometrycollection', ] ) COLUMNTYPE_NUMBER = [ 'tinyint', 'smallint', 'mediumint', 'int', 'number', 'integer', 'bit', 'bigint', 'float', 'double', 'decimal', ] COLUMNNAME_NOT_ADD_SHOW = ['create_by', 'create_time'] COLUMNNAME_NOT_EDIT_SHOW = ['update_by', 'update_time'] COLUMNNAME_NOT_EDIT = ['id', 'create_by', 'create_time', 'del_flag'] COLUMNNAME_NOT_LIST = ['id', 'create_by', 'create_time', 'del_flag', 'update_by', 'update_time'] COLUMNNAME_NOT_QUERY = ['id', 'create_by', 'create_time', 'del_flag', 'update_by', 'update_time', 'remark'] BASE_ENTITY = ['createBy', 'createTime', 'updateBy', 'updateTime', 'remark'] TREE_ENTITY = ['parentName', 'parentId', 'orderNum', 'ancestors', 'children'] HTML_INPUT = 'input' HTML_TEXTAREA = 'textarea' HTML_SELECT = 'select' HTML_RADIO = 'radio' HTML_CHECKBOX = 'checkbox' HTML_DATETIME = 'datetime' HTML_IMAGE_UPLOAD = 'imageUpload' HTML_FILE_UPLOAD = 'fileUpload' HTML_EDITOR = 'editor' TYPE_DECIMAL = 'Decimal' TYPE_DATE = ['date', 'time', 'datetime'] QUERY_LIKE = 'LIKE' QUERY_EQ = 'EQ' REQUIRE = '1' DB_TO_SQLALCHEMY_TYPE_MAPPING = ( { 'boolean': 'Boolean', 'smallint': 'SmallInteger', 'integer': 'Integer', 'bigint': 'BigInteger', 'real': 'Float', 'double precision': 'Float', 'numeric': 'Numeric', 'character varying': 'String', 'character': 'String', 'text': 'Text', 'bytea': 'LargeBinary', 'date': 'Date', 'time': 'Time', 'time with time zone': 'Time', 'time without time zone': 'Time', 'timestamp': 'DateTime', 'timestamp with time zone': 'DateTime', 'timestamp without time zone': 'DateTime', 'interval': 'Interval', 'json': 'JSON', 'jsonb': 'JSONB', 'uuid': 'Uuid', 'inet': 'INET', 'cidr': 'CIDR', 'macaddr': 'MACADDR', 'point': 'Geometry', 'line': 'Geometry', 'lseg': 'Geometry', 'box': 'Geometry', 'path': 'Geometry', 'polygon': 'Geometry', 'circle': 'Geometry', 'bit': 'Bit', 'bit varying': 'Bit', 'tsvector': 'TSVECTOR', 'tsquery': 'TSQUERY', 'xml': 'String', 'array': 'ARRAY', 'composite': 'JSON', 'enum': 'Enum', 'range': 'Range', 'money': 'Numeric', 'pg_lsn': 'BigInteger', 'txid_snapshot': 'String', 'oid': 'BigInteger', 'regproc': 'String', 'regclass': 'String', 'regtype': 'String', 'regrole': 'String', 'regnamespace': 'String', 'int2vector': 'ARRAY', 'oidvector': 'ARRAY', 'pg_node_tree': 'Text', } if settings.DATABASE_TYPE == 'postgresql' else { # 数值类型 'TINYINT': 'SmallInteger', 'SMALLINT': 'SmallInteger', 'MEDIUMINT': 'Integer', 'INT': 'Integer', 'INTEGER': 'Integer', 'BIGINT': 'BigInteger', 'FLOAT': 'Float', 'DOUBLE': 'Float', 'DECIMAL': 'DECIMAL', 'BIT': 'Integer', # 日期和时间类型 'DATE': 'Date', 'TIME': 'Time', 'DATETIME': 'DateTime', 'TIMESTAMP': 'TIMESTAMP', 'YEAR': 'Integer', # 字符串类型 'CHAR': 'CHAR', 'VARCHAR': 'String', 'TINYTEXT': 'Text', 'TEXT': 'Text', 'MEDIUMTEXT': 'Text', 'LONGTEXT': 'Text', 'BINARY': 'BINARY', 'VARBINARY': 'VARBINARY', 'TINYBLOB': 'LargeBinary', 'BLOB': 'LargeBinary', 'MEDIUMBLOB': 'LargeBinary', 'LONGBLOB': 'LargeBinary', # 枚举和集合类型 'ENUM': 'Enum', 'SET': 'String', # JSON 类型 'JSON': 'JSON', # 空间数据类型(需要扩展支持,如 GeoAlchemy2) 'GEOMETRY': 'Geometry', # 需要安装 geoalchemy2 'POINT': 'Geometry', 'LINESTRING': 'Geometry', 'POLYGON': 'Geometry', 'MULTIPOINT': 'Geometry', 'MULTILINESTRING': 'Geometry', 'MULTIPOLYGON': 'Geometry', 'GEOMETRYCOLLECTION': 'Geometry', } ) DB_TO_PYTHON_TYPE_MAPPING = ( { 'boolean': 'bool', 'smallint': 'int', 'integer': 'int', 'bigint': 'int', 'real': 'float', 'double precision': 'float', 'numeric': 'Decimal', 'character varying': 'str', 'character': 'str', 'text': 'str', 'bytea': 'bytes', 'date': 'date', 'time': 'time', 'time with time zone': 'time', 'time without time zone': 'time', 'timestamp': 'datetime', 'timestamp with time zone': 'datetime', 'timestamp without time zone': 'datetime', 'interval': 'timedelta', 'json': 'dict', 'jsonb': 'dict', 'uuid': 'str', 'inet': 'str', 'cidr': 'str', 'macaddr': 'str', 'point': 'list', 'line': 'list', 'lseg': 'list', 'box': 'list', 'path': 'list', 'polygon': 'list', 'circle': 'list', 'bit': 'int', 'bit varying': 'int', 'tsvector': 'str', 'tsquery': 'str', 'xml': 'str', 'array': 'list', 'composite': 'dict', 'enum': 'str', 'range': 'list', 'money': 'Decimal', 'pg_lsn': 'int', 'txid_snapshot': 'str', 'oid': 'int', 'regproc': 'str', 'regclass': 'str', 'regtype': 'str', 'regrole': 'str', 'regnamespace': 'str', 'int2vector': 'list', 'oidvector': 'list', 'pg_node_tree': 'str', } if settings.DATABASE_TYPE == 'postgresql' else { # 数值类型 'TINYINT': 'int', 'SMALLINT': 'int', 'MEDIUMINT': 'int', 'INT': 'int', 'INTEGER': 'int', 'BIGINT': 'int', 'FLOAT': 'float', 'DOUBLE': 'float', 'DECIMAL': 'Decimal', 'BIT': 'int', # 日期和时间类型 'DATE': 'date', 'TIME': 'time', 'DATETIME': 'datetime', 'TIMESTAMP': 'datetime', 'YEAR': 'int', # 字符串类型 'CHAR': 'str', 'VARCHAR': 'str', 'TINYTEXT': 'str', 'TEXT': 'str', 'MEDIUMTEXT': 'str', 'LONGTEXT': 'str', 'BINARY': 'bytes', 'VARBINARY': 'bytes', 'TINYBLOB': 'bytes', 'BLOB': 'bytes', 'MEDIUMBLOB': 'bytes', 'LONGBLOB': 'bytes', # 枚举和集合类型 'ENUM': 'str', 'SET': 'str', # JSON 类型 'JSON': 'dict', # 空间数据类型(通常需要特殊处理) 'GEOMETRY': 'bytes', 'POINT': 'bytes', 'LINESTRING': 'bytes', 'POLYGON': 'bytes', 'MULTIPOINT': 'bytes', 'MULTILINESTRING': 'bytes', 'MULTIPOLYGON': 'bytes', 'GEOMETRYCOLLECTION': 'bytes', } ) # if __name__ == "__main__": # print(RET.OK.msg) # 输出: 成功