alchemy php,js中sqlalchemy的实例详解

sqlalchemy的返回类型有大都有两种,一种是Model对象,一种是Query集合(只查询部分字段)。

针对这两种返回结果,都是来自同一中类型 sqlalchemy.orm.query.Query

所以针对Query做相应处理,让他返回一个dict

class AlchemyJsonEncoder(json.JSONEncoder):

def default(self, obj):

# 判断是否是Query

if isinstance(obj, Query):

# 定义一个字典数组

fields = []

# 定义一个字典对象

record = {}

# 检索结果集的行记录

for rec in obj.all():

# 检索记录中的成员

for field in [x for x in dir(rec) if

# 过滤属性

not x.startswith('_')

# 过滤掉方法属性

and hasattr(rec.__getattribute__(x), '__call__') == False

# 过滤掉不需要的属性

and x != 'metadata']:

data = rec.__getattribute__(field)

try:

record[field] = data

except TypeError:

record[field] = None

fields.append(record)

# 返回字典数组

return fields

# 其他类型的数据按照默认的方式序列化成JSON

return json.JSONEncoder.default(self, obj)

这样在每次序列化的时候就可以简单的使用

json.dumps(result1, cls=AlchemyJsonEncoder)

来实现对结果集的json序列化了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值