flask实现分页但不使用SQLAlchemy ORM 操作数据库
时间: 2023-12-04 12:05:45 浏览: 152
要实现分页功能,可以使用 Python 的内置模块 `sqlite3` 或第三方模块 `pymysql` 来操作数据库。这里以 `sqlite3` 为例:
1. 首先需要连接到数据库,可以使用 `sqlite3.connect()` 方法:
```python
import sqlite3
conn = sqlite3.connect('mydatabase.db')
```
2. 接下来可以使用 `conn.cursor()` 方法获取游标对象:
```python
cursor = conn.cursor()
```
3. 使用游标对象执行查询语句:
```python
cursor.execute('SELECT * FROM mytable')
```
4. 使用 `cursor.fetchmany()` 方法获取指定数量的结果:
```python
results = cursor.fetchmany(10)
```
5. 最后关闭游标和数据库连接:
```python
cursor.close()
conn.close()
```
通过这些步骤,可以实现从数据库中获取指定数量的数据,并实现分页功能。具体实现可以参考下面的代码:
```python
import sqlite3
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def index():
page = request.args.get('page', 1, type=int)
per_page = 10
offset = (page - 1) * per_page
conn = sqlite3.connect('mydatabase.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM mytable LIMIT ? OFFSET ?', (per_page, offset))
results = cursor.fetchall()
cursor.close()
conn.close()
return render_template('index.html', results=results)
if __name__ == '__main__':
app.run()
```
在模板文件 `index.html` 中可以使用 Jinja2 的模板语法渲染数据和分页链接:
```html
{% for result in results %}
<p>{{ result }}</p>
{% endfor %}
{% if results %}
<div class="pagination">
{% if page > 1 %}
<a href="{{ url_for('index', page=page-1) }}">上一页</a>
{% endif %}
{% if len(results) == per_page %}
<a href="{{ url_for('index', page=page+1) }}">下一页</a>
{% endif %}
</div>
{% endif %}
```
这样就可以实现基于 Flask 的分页功能了。
阅读全文