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

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

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

répondre à tous(3)
阿神

Merci pour l'invitation

Je peux comprendre ce que vous voulez sérialiser. Je suppose que vous voulez obtenir l'effet suivant :

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

response = jsonify(user.to_json())

J'ai déjà suivi une telle méthode, mais convertir directement les champs d'un objet en json signifie que de nombreux champs qui ne sont pas nécessaires au front-end seront également renvoyés ensemble. Personnellement, je n’aime pas beaucoup ça. J’ai tendance à donner au front-end tout ce dont il a besoin. Donc, une opération to_json aussi simple n'est pas très bonne, à moins que vous ne combiniez des plug-ins de sérialisation, qui peuvent bien contrôler ce qui doit être renvoyé au front-end. Cependant, après avoir examiné de tels plug-ins, il n'y a personne. c'est très pratique à utiliser. Au contraire, il est plus flexible de l'assembler soi-même, donc petit à petit je ne poursuis plus cette méthode. Si vous préférez cela, vous pouvez consulter le plug-in django-rest-framework La sérialisation à l'intérieur est peut-être ce que vous souhaitez. En plus de l'ORM SQLAlchemy, il y a l'ORM Orator. Personnellement, je me sens très à l'aise en regardant simplement le code source. Vous pouvez le vérifier si vous en avez l'occasion.

Donc, en résumé, il n’y a pas de bonnes recommandations. Bien sûr, vous pouvez en mettre en œuvre une vous-même, et c’est tout.

伊谢尔伦

Pourquoi ne pas utiliser pickle ? Ou est-ce parce qu'il doit être sérialisé en JSON ?

PHPzhong

mongodb + mongokit devrait être plus à votre goût

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal