| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- from sqlalchemy.engine.row import Row
- class CamelCaseUtil:
- """
- 下划线形式(snake_case)转小驼峰形式(camelCase)工具方法
- """
-
- @classmethod
- def snake_to_camel(cls, snake_str):
- """
- 下划线形式字符串(snake_case)转换为小驼峰形式字符串(camelCase)
- :param snake_str: 下划线形式字符串
- :return: 小驼峰形式字符串
- """
- # 分割字符串
- words = snake_str.split('_')
- # 小驼峰命名,第一个词首字母小写,其余词首字母大写
- return words[0] + ''.join(word.capitalize() for word in words[1:])
-
- @classmethod
- def transform_result(cls, result):
- """
- 针对不同类型将下划线形式(snake_case)批量转换为小驼峰形式(camelCase)方法
- :param result: 输入数据
- :return: 小驼峰形式结果
- """
- if result is None:
- return result
- # 如果是字典,直接转换键
- elif isinstance(result, dict):
- return {cls.snake_to_camel(k): v for k, v in result.items()}
- # 如果是一组字典或其他类型的列表,遍历列表进行转换
- elif isinstance(result, list):
- return [
- cls.transform_result(row)
- if isinstance(row, (dict, Row))
- else (
- cls.transform_result({c.name: getattr(row, c.name) for c in row.__table__.columns}) if row else row
- )
- for row in result
- ]
- # 如果是sqlalchemy的Row实例,遍历Row进行转换
- elif isinstance(result, Row):
- return [
- cls.transform_result(row)
- if isinstance(row, dict)
- else (
- cls.transform_result({c.name: getattr(row, c.name) for c in row.__table__.columns}) if row else row
- )
- for row in result
- ]
- # 如果是其他类型,如模型实例,先转换为字典
- else:
- return cls.transform_result({c.name: getattr(result, c.name) for c in result.__table__.columns})
|