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

Posted

技术标签:

【中文标题】我们如何使用 Flask 对 SQL Server 搜索结果进行分页【英文标题】:How do we paginate SQL Server search results with Flask 【发布时间】:2019-10-25 17:13:47 【问题描述】:

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

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

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

有人可以帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

我假设您没有使用 ORM。

您可以limit the number of rows returned using OFFSET and 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

【讨论】:

感谢您的回复!不幸的是,我的数据库在 SQLServer 2008 中,我认为我无法使用您的解决方案

以上是关于我们如何使用 Flask 对 SQL Server 搜索结果进行分页的主要内容,如果未能解决你的问题,请参考以下文章

在python3下怎样用flask-sqlalchemy对mysql数据库操作

升级到 Python 3.6 和 SQL Server 2016 后出现 Pymssql 错误 20017

必须重新启动 apache 服务器才能在 Flask 中显示来自 SQL Server 的数据

如何使用Http Server服务Flask [重复]

如何对通过 MS JDBC 驱动程序运行的 MS SQL Server 查询强制执行查询超时?

sql server如何分组编号