当前位置:   article > 正文

flask-sqlalchemy输出json格式数据_sqlalchemy json

sqlalchemy json

flask-sqlalchemy查询数据:

  1. user = db.session.execute(db.select(User).filter_by(username=username)).scalar_one()
  2. users = db.session.execute(db.select(User).order_by(User.username)).scalars()

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

User.query.all() 

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

  1. json.dumps(users)
  2. 或者
  3. jsonify(users)
  4. 都会出现错误:Object of type ScalarResult is not JSON serializable

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

  1. #将单个数据转为dict
  2. def model_to_dict(object):
  3. return {c.name: getattr(object, c.name) for c in object.__table__.columns}
  4. #将一组数据转为list
  5. def scalars_to_list(object):
  6. return [model_to_dict(c) for c in object]

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

  1. @app.route('/')
  2. def index():
  3. users=db.session.execute(db.select(User)).scalars()
  4. #user=db.session.execute(db.select(User)).scalar()
  5. ret = scalars_to_list(users)
  6. #ret = model_to_dict(user)
  7. return ret
  8. #return json.dumps(ret)

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/181053?site
推荐阅读
相关标签
  

闽ICP备14008679号