python - 烧瓶 SQLAlchemy 棉花糖 | 如何查询两个 ID 值之间的所有条目
问题描述
我希望能够查询数据库并将jsonify()
结果通过服务器发送。
我的函数应该在每次调用时递增地发送帖子x
数量,即发送帖子 1 - 10,...,发送帖子 31 - 40,...
我有以下查询:
q = Post.query.filter(Post.column.between(x, x + 10))
result = posts_schema.dump(q)
return make_response(jsonify(result), 200) // or would it be ...jsonify(result.data), 200)?
理想情况下,它会返回如下内容:
[
{
"id": 1,
"title": "Title",
"description": "A descriptive description."
},
{
"id": 2,
...
},
...
]
我正在使用的 SQLAlchemy 模型和 Marshmallow 模式:
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(30))
content = db.Column(db.String(150))
def __init__(self, title, description):
self.title = title
self.description = description
class PostSchema(ma.Schema):
class Meta:
fields = ('id', 'title', 'description')
posts_schema = PostSchema(many=True)
我是新手SQLAlchemy
,所以我对查询还不太了解。另一个用户必须用当前查询向我指出我现在所处的方向,但我认为这不太正确。
在 SQL 中,我希望重现以下内容:
SELECT * FROM Post WHERE id BETWEEN value1 AND value2
解决方案
要使用 SQL Alchemy 进行分页,您需要执行以下操作:
# In the view function, collect the page and per page values
@app.route(''/posts/<int:page>/<int:per_page>', methods=['GET'])
def posts(page=1, per_page=30):
#... insert other logic here
posts = Post.query.order_by(Post.id.asc()) # don't forget to order these by ID
posts = posts.paginate(page=page, per_page=per_page)
return jsonify({
'page': page,
'per_page': per_page,
'has_next': posts.has_next,
'has_prev': posts.has_prev,
'page_list': [iter_page if iter_page else '...' for iter_page in posts.iter_pages()],
'posts': [{
'id': p.id,
'title': p.title,
'content': p.content
} for p in posts.items]
})
在前端,您将使用page_list
、page
、per_page
、has_next
和has_prev
值来帮助用户选择下一个要转到的页面。
您在 URL 中传递的值将指示下一个要转到的页面。这一切都为您方便地内置到 SQLAlchemy 中,这也是它如此出色的库的另一个原因。
推荐阅读
- c# - .NET 5 Core Entity Framework Controller w/OData Return Child Object with a Child Object
- sql - 如何在 BigQuery 中取消透视结构?
- c++ - C++ 入门(第 5 版);第 19 章 - 算法:std::lower_bound
- visual-studio-code - 如何让 Visual Studio Code 自动滚动调试控制台?
- javascript - HTML 输入元素大小为 0
- python - Discord bot 不响应命令(python)
- r - r 相关矩阵长格式
- c# - C# ReportViewer 未指定报表定义的来源
- discord.js - 当我尝试获取我的机器人状态并执行节点时,“未定义客户端”
- spring-boot - Springboot REST API 全局扩展处理程序