【问题标题】:Pagination in Flask using MySql使用 MySql 在 Flask 中进行分页
【发布时间】:2023-03-20 07:07:01
【问题描述】:

我搜索了很多关于它的信息。我得到的所有文章都包括 SQLAlchemy,但没有一篇涉及 mysql。我正在使用烧瓶,我在 mysql 中有一个数据库,我需要在页面中显示数据。像 1000 张图片,每页 10 幅,所以 100 页。 在mysql中,我们可以借助limit进行分页。路线可以是:

@app.route('/images', defaults={'page':1})
@app.route('/images/page/<int:page>')

我想问一下,这就是分页所需的全部内容吗?还是我在这里忘记了一些重要的事情? 和 mysql 语法将是:

db = mysql.connect('localhost', 'root', 'password', 'img')
cursor = db.cursor()
cursor.execute('SELECT Id,Title,Img FROM image ORDER BY RAND() limit 20 offset 0;')
data = list(cursor.fetchall())

要获得前 20 个结果,但如何根据 pageno 获得下一个结果。? Flask-paginate 库仅适用于 tSQLAlchemy。

【问题讨论】:

  • 我做到了。它无法理解它。这就是我寻求帮助的原因
  • 您不想使用 SqlAlchemy 或其他 ORM 的原因是什么?处理纯 SQL 不必要地复杂。
  • 没有 mysql 更快,而且我的整个程序都在它上面运行,而且我在那里完成了所有数据库
  • "mysql 更快" - 比什么更快?我怀疑您并不真正了解 MySQL(数据库)和 SqlAlchemy(与数据库对话的对象关系映射器)之间的区别。

标签: python mysql pagination flask


【解决方案1】:

试试这个

@app.route('/images', defaults={'page':1})
@app.route('/images/page/<int:page>')
def abc(page):
    perpage=20
    startat=page*perpage
    db = mysql.connect('localhost', 'root', 'password', 'img')
    cursor = db.cursor()
    cursor.execute('SELECT Id,Title,Img FROM image limit %s, %s;', (startat,perpage))
    data = list(cursor.fetchall())

也许这会有所帮助。

【讨论】:

  • 谢谢,但是不需要使用任何库什么的吗?
  • 实际上,limit 子句是limit ?, ?,然后您将一个元组作为第二个参数传递给cursor.execute(例如cursor.execute("your sql here with params ?, ?", (start_at, per_page))
  • @AarushiIgn - 你不想使用% (string.format) - 而是将参数作为第二个参数传递给execute。否则,您可能会使应用程序容易受到 SQL 注入攻击。
  • 如果我们的 url 中有参数作为 get 方法怎么办?在这里您定义了两个端点,但如果我们只需要一个?在那个我们可以支持 args
【解决方案2】:

试试这个 flask-mysql-paginate

然后您可以在 html 文件中调用 {{paginate.links}}

【讨论】:

    【解决方案3】:

    就是这样,纯 SQL 解决方案。

    SELECT * FROM table LIMIT [offset,] rows;
    or
    SELECT * FROM table LIMIT rows OFFSET offset;
    

    例如:

    select * from user
    limit 100 offset 850100;
    

    【讨论】:

      猜你喜欢
      • 2014-12-26
      • 2016-04-14
      • 2016-06-12
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      • 2020-10-05
      • 2011-10-09
      • 1970-01-01
      相关资源
      最近更新 更多