我们如何使用Flask对SQL Server搜索结果进行分页



我有一个flask应用程序,它正在查询SQL server数据库以在其中一个网页上显示图像结果。问题是,当我得到多个结果时,由于结果的数量,页面加载变得非常慢。我找不到任何使用SQL Server可以在一页上显示固定数量的结果,并在多页中显示结果集的烧瓶文档。

我正在使用pymssql库来获取结果,查询看起来像这样:

"SELECT [Id],[user], [post_text], [media_url], [media_type]FROM [{}].[dbo].[SM_POSTS] WHERE Id = {}".format(DB,id)

有人能帮我做这个吗?

我假设您没有使用ORM。

  • 您可以限制使用OFFSET和FETCH(SQL Server 2012+(返回的行数。

  • 使用查询参数控制页码,然后使用页码生成SQL查询。

简单示例

index.html

Go To Page
{% for i in range(1,5) %}
<a href="{{url_for('my_route', page = i)}}">{{i}}</a>
{% endfor %}

app.py

from flask import Flask, render_template, request
app = Flask(__name__)

@app.route('/')
def index():
return render_template('index.html')

@app.route('/my_route')
def my_route():
page_no = int(request.args.get('page', 1))
results_per_page = 10
offset = (page_no-1) * results_per_page
my_db = 'mydb'
my_id = 1
query = """
SELECT [Id],[user], [post_text], [media_url], [media_type] FROM
[{}].[dbo].[SM_POSTS] WHERE Id = {}
ORDER BY [post_text] ASC
OFFSET  {} ROWS
FETCH NEXT {} ROWS ONLY
""".format(my_db, my_id, offset, results_per_page)
# I am just returning the query itself
return query

if __name__ == "__main__":
app.run(debug=True)

转到http://127.0.0.1:5000/my_route?page=2将给出以下查询

SELECT [Id],[user], [post_text], [media_url], [media_type] FROM [mydb].[dbo].[SM_POSTS] WHERE Id = 1 ORDER BY [post_text] ASC OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY

最新更新