flask-sqlalchemy输出json格式数据

flask-sqlalchemy查询数据:

user = db.session.execute(db.select(User).filter_by(username=username)).scalar_one()

users = db.session.execute(db.select(User).order_by(User.username)).scalars()

注意:根据官网文档,已经不推荐使用下面的方法来查询数据。

User.query.all() 

查询所得的user为User类型,users则为User类型的集合,无法直接return给前端,需要进行格式化。网上一般会推荐使用json.dump()或者jsonify()来序列化数据,但对于sqlalchemy的对象并不适用。

json.dumps(users)
或者
jsonify(users)

都会出现错误:Object of type ScalarResult is not JSON serializable

这个问题可以通过增加两个函数来处理:

#将单个数据转为dict
def model_to_dict(object):
    return {c.name: getattr(object, c.name) for c in object.__table__.columns}

#将一组数据转为list
def scalars_to_list(object):
    return [model_to_dict(c) for c in object]

下面是一个事例代码片段:

@app.route('/')
def index():
    users=db.session.execute(db.select(User)).scalars()
    #user=db.session.execute(db.select(User)).scalar()
    ret = scalars_to_list(users)
    #ret = model_to_dict(user)
    return ret
    #return json.dumps(ret)

输出JSON可能会遇到中文乱码的问题,可以尝试修改Flask的配置解决:

#解决中文乱码的问题,将json数据内的中文正常显示
app.config['JSON_AS_ASCII'] = False

你可能感兴趣的:(flask,json,python,sql)