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

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 もあります。これは、ソース コードを見るだけで快適だと個人的に感じます。機会があれば確認してください。

要約すると、適切な推奨事項はありません。もちろん、自分で実装することもできます。

いいねを押す +0
伊谢尔伦

なぜ pickle を使用しないのですか? それとも JSON にシリアル化する必要があるためですか?

いいねを押す +0
PHPzhong

mongodb + mongokit はあなたの好みに合うはずです

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート