python - SQLAlchemy 对象进行 JSON 序列化, 有什么好的方法( 集思广益 )?
大家讲道理
大家讲道理 2017-04-18 09:54:23
0
3
749

2016/11/12

问题

将 SQLAlchemy 对象, 转化为Python-dict, 或者序列化成 JSON, 主要实现:

  1. to_dict()

  2. to_json()

我自己实现了一种做法, 但是总感觉还有些问题( 但是又说不清楚 ), 大家有什么比较好的办法?

相关代码

将这两个方法直接绑定到Base上面, 则继承Base的类, 都能使用

def _gen_tuple(self):
    def convert_datetime(value):
        if value:
            return value.strftime("%Y-%m-%d %H:%M:%S")
        else:
            return ""

    for col in self.__table__.columns:
        if isinstance(col.type, DateTime):
            value = convert_datetime(getattr(self, col.name))
        elif isinstance(col.type, Numeric):
            value = float(getattr(self, col.name))
        else:
            value = getattr(self, col.name)
        yield (col.name, value)


def to_dict(self):
    return dict(self._gen_tuple())


def to_json(self):
    return json.dumps(self.to_dict())

Base._gen_tuple = _gen_tuple
Base.to_dict = to_dict
Base.to_json = to_json
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

모든 응답(3)
阿神

초대해주셔서 감사합니다

연재하려는 내용을 이해할 수 있습니다. 다음과 같은 효과를 얻고자 하는 것 같습니다.

으아악

이전부터 이런 방식을 추구해왔지만 객체의 필드를 json로 직접 변환한다는 것은 프런트엔드에서 필요하지 않은 많은 필드도 함께 반환된다는 의미입니다. 개인적으로 나는 프런트 엔드에 필요한 모든 것을 제공하는 경향이 있습니다. 따라서 이러한 간단한 to_json 작업은 프런트 엔드에 반환해야 하는 내용을 잘 제어할 수 있는 일부 직렬화 플러그인을 결합하지 않는 한 그다지 좋지 않습니다. 그러나 이러한 플러그인을 살펴보면 그다지 좋지 않습니다. 사용하기 편리합니다. 오히려 직접 조립하는 게 더 유연해서 점차 그런 방식을 추구하지 않게 됐어요. 이것을 선호한다면 django-rest-framework 플러그인을 확인해 보세요. 내부의 직렬화가 원하는 것일 수도 있습니다. SQLAlchemy ORM 외에도 Orator ORM이 있는데, 개인적으로 소스코드만 봐도 참 편하다는 생각이 듭니다.

요컨대, 좋은 권장 사항은 없습니다. 물론 직접 구현할 수도 있습니다.

伊谢尔伦

피클을 사용하지 않는 이유는 무엇인가요? 아니면 JSON으로 직렬화해야 하기 때문인가요?

PHPzhong

mongodb + mongokit이 더 마음에 드실 겁니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿