Python序列化模型数据为JSON
admin
2023-07-31 00:46:08
0

相信使用Python做Web开发的朋友都会遇到这样1个问题,那就是在项目开发中使用模型框架,比如SQLAlchemy、Peewee,我们在做RESTful接口时如何将这些模型序列化为JSON数据。
关于这个问题,跟隔壁那位搞Python的哥们有关系。我不得不佩服这位哥们竟然自己写了1套ORM框架,而且用起来的那么遛,不得不让我汗颜。
但是,在给前端提供接口的时候,如何序列化为JSON数据确实困扰了我们那么一阵子,毕竟占据我们很大一部分时间来进行序列化操作。
这里,我们使用peewee来定义1个简单的例子来说明:

123456789101112131415161718 from peewee import SqliteDatabasefrom peewee import Model, CharField, DateField, BooleanField, ForeignKeyField db = SqliteDatabase(\’dev.sqlite3\’) class BaseModel(Model):    class Meta:        database = db class Person(BaseModel):    name = CharField(max_length= 20)    birthday = DateField()    sex = BooleanField() class Pet(BaseModel):    owner = ForeignKeyField(Person, related_name= \’pets\’)    name = CharField(max_length= 10)    animal_type = CharField(max_length= 20)

在这里我们定义了Person和Pet这2个模型,每个Person可能有1个Pet的宠物。
我们插入一些数据,现在假设我们现在有如下的数据:

12345678910 sqlite> select * from person;1|Bob|19600115|12|Grandma|19350301|03|Herb|19500505|1sqlite> select * from pet;1|1|Kitty|cat2|3|Fido|dog3|3|Mittens|cat4|2|Jack|cat 

现在,我们假设我们接口需要返回的接口是每个用户的名称、生日及其对应的宠物的信息。
我们可以通过连表的方式轻松的获取到我们需要的数据:

1 query=Person.select(Person,Pet).join(Pet)

那么我们怎么将这个模型数据转换为我们需要的JSON数据呢?一般情况下,我们会这样操作:

123456789101112 data = []for person in query.aggregate_rows():    d={}    d[\’username\’] = person.name    d[\’birthday\’] = person.birthday    d[\’pet\’] = []    for pet in person.pets:        o = {}        o[\’name\’] = pet.name        o[\’animal_type\’] = pet.animal_type        d[\’pet\’].append(o)    data.append(d)

最后我们将得到如下的结果:

1234567891011 [{\’birthday\’: datetime.date(1960, 1, 15),  \’pet\’: [{\’animal_type\’ayon-h\”> 15),  \’pet\’: [{\’animal_type\’br>
但是,在给前端提供接口的时候,如何序列化为JSON数据确实困扰了我们那么一阵子,毕竟占据我们很大一部分时间来进行序列化操作。
这里,我们使用peewee来定义1个简单的例子来说明:

123456789101112131415161718 from peewee import SqliteDatabasefrom peewee import Model, CharField, DateField, BooleanField, ForeignKeyField db = SqliteDatabase(\’dev.sqlite3\’) class BaseModel(Model):    class Meta:        database = db class Person(BaseModel):    name = CharField(max_length= 20)    birthday = DateField()    sex = BooleanField() class Pet(BaseModel):    owner = ForeignKeyField(Person, related_name= \’pets\’)    name = CharField(max_length= 10)    animal_type = CharField(max_length= 20)

在这里我们定义了Person和Pet这2个模型,每个Person可能有1个Pet的宠物。
我们插入一些数据,现在假设我们现在有如下的数据:

12345678910 sqlite> select * from person;1|Bob|19600115|12|Grandma|19350301|03|Herb|19500505|1sqlite> select * from pet;1|1|Kitty|cat2|3|Fido|dog3|3|Mittens|cat4|2|Jack|cat 

现在,我们假设我们接口需要返回的接口是每个用户的名称、生日及其对应的宠物的信息。
我们可以通过连表的方式轻松的获取到我们需要的数据:

1 query=Person.select(Person,Pet).join(Pet)

那么我们怎么将这个模型数据转换为我们需要的JSON数据呢?一般情况下,我们会这样操作:

123456789101112 data = []for person in query.aggregate_rows():    d={}    d[\’username\’] = person.name    d[\’birthday\’] = person.birthday    d[\’pet\’] = []    for pet in person.pets:        o = {}        o[\’name\’] = pet.name        o[\’animal_type\’] = pet.animal_type        d[\’pet\’].append(o)    data.append(d)

最后我们将得到如下的结果:

1234567891011 [{\’birthday\’: datetime.date(1960, 1, 15),  \’pet\’: [{\’animal_type\’td class=\”crayon-nums \” data-settings=\”show\”>
div class=\”crayon-nums-content\” style=\”font-size: 13px !important; line-height: 15px !important;\”>div class=\”crayon-num\” data-line=\”crayon-5812b15ff1ed6661327631-1\”>1/div>div class=\”crayon-num crayon-striped-num\” data-line=\”crayon-5812b15ff1ed6661327631-2\”>2/div>/div>
/td>

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...