赞
踩
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。