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

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
大家讲道理
大家讲道理

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

membalas semua(3)
阿神

Terima kasih atas jemputan

Saya boleh faham apa yang anda ingin sirikan, saya rasa anda ingin mencapai kesan berikut:

user = User.query.filter_by(id=id).first()

response = jsonify(user.to_json())

Saya telah mengikuti kaedah sedemikian sebelum ini, tetapi secara langsung menukar medan dalam objek menjadi json bermakna banyak medan yang tidak diperlukan oleh bahagian hadapan juga akan dikembalikan bersama. Secara peribadi, saya tidak begitu menyukainya, saya cenderung untuk memberikan bahagian hadapan apa sahaja yang diperlukan. Jadi operasi to_json yang mudah seperti itu tidak begitu baik, melainkan anda menggabungkan beberapa pemalam bersiri, yang boleh mengawal dengan baik apa yang perlu dikembalikan ke bahagian hadapan Namun, selepas melihat sekeliling pemalam tersebut, tiada siapa yang sangat mudah digunakan. Sebaliknya, ia adalah lebih fleksibel untuk memasangnya sendiri, jadi secara beransur-ansur saya tidak lagi mengikuti kaedah sedemikian. Jika anda lebih suka ini, anda boleh menyemak pemalam django-rest-framework Siri di dalamnya mungkin yang anda mahukan. Sebagai tambahan kepada SQLAlchemy ORM, terdapat Orator ORM, yang secara peribadi saya rasa cukup bagus.

Jadi, secara ringkasnya, tiada syor yang baik Sudah tentu, anda boleh melaksanakannya sendiri, dan itu sahaja.

伊谢尔伦

Mengapa tidak menggunakan jeruk? Atau adakah kerana ia mesti disiri ke dalam JSON?

PHPzhong

mongodb + mongokit sepatutnya lebih mengikut citarasa anda

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan