flask_sqlalchemy with_entities和filter一起使用 查询的结果转为列表嵌套字典 并进行分页处理 写一个例子给我
时间: 2023-05-13 07:05:03 浏览: 123
好的,以下是一个使用 flask_sqlalchemy 的例子,可以同时使用 with_entities 和 filter 查询,并将结果转换为列表嵌套字典,并进行分页处理:
```python
from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
age = db.Column(db.Integer)
@app.route('/users')
def get_users():
page = request.args.get('page', 1, type=int)
per_page = request.args.get('per_page', 10, type=int)
query = User.query.with_entities(User.id, User.name, User.age).filter(User.age > 18)
users = query.paginate(page=page, per_page=per_page)
result = {
'total': users.total,
'page': users.page,
'per_page': users.per_page,
'items': [{'id': u.id, 'name': u.name, 'age': u.age} for u in users.items]
}
return jsonify(result)
if __name__ == '__main__':
app.run()
```
在这个例子中,我们定义了一个 User 模型,包含 id、name 和 age 三个字段。在 get_users 函数中,我们使用 with_entities 和 filter 查询了 User 表中年龄大于 18 的用户,并将结果转换为列表嵌套字典的形式。我们还使用了 paginate 函数进行分页处理,可以通过请求参数 page 和 per_page 来控制每页显示的数量和当前页数。最后,我们将结果以 JSON 的形式返回给客户端。
阅读全文