sqlalchemy_util.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from sqlalchemy.engine.row import Row
  2. from domain.models.base_model import Base
  3. class SqlalchemyUtil:
  4. """
  5. sqlalchemy工具类
  6. """
  7. @classmethod
  8. def base_to_dict(cls, obj: Base):
  9. """
  10. 将sqlalchemy模型对象转换为字典
  11. :param obj: sqlalchemy模型对象
  12. :return: 字典结果
  13. """
  14. base_dict = obj.__dict__.copy()
  15. base_dict.pop('_sa_instance_state', None)
  16. return base_dict
  17. @classmethod
  18. def serialize_result(cls, result):
  19. """
  20. 将sqlalchemy查询结果序列化
  21. :param result: sqlalchemy查询结果
  22. :return: 序列化结果
  23. """
  24. if isinstance(result, Base):
  25. return cls.base_to_dict(result)
  26. elif isinstance(result, list):
  27. return [cls.serialize_result(row) for row in result]
  28. elif isinstance(result, Row):
  29. if all([isinstance(row, Base) for row in result]):
  30. return [cls.base_to_dict(row) for row in result]
  31. elif any([isinstance(row, Base) for row in result]):
  32. return [cls.serialize_result(row) for row in result]
  33. else:
  34. return {key: getattr(result, key) for key in result.keys()}
  35. return result