📅  最后修改于: 2023-12-03 15:30:47.090000             🧑  作者: Mango
在 Flask 应用程序中使用 SQLite 数据库是一种简单的方式来存储和查询数据。这篇文章将介绍如何在 Flask 应用程序中查询 SQLite 数据库。
首先,我们需要安装 sqlite3
模块并在 Flask 应用程序中导入它。然后,我们需要创建一个连接到 SQLite 数据库的对象。在 Flask 应用程序中,我们可以在 app.py
文件中添加如下代码:
from flask import Flask
import sqlite3
app = Flask(__name__)
DB_NAME = 'mydatabase.db'
def get_db():
conn = sqlite3.connect(DB_NAME)
conn.row_factory = sqlite3.Row
return conn
@app.teardown_appcontext
def close_db(error):
if hasattr(g, 'db'):
g.db.close()
在上面的代码中,我们定义 DB_NAME
变量来存储 SQLite 数据库的文件名。get_db()
函数用于创建一个连接到 SQLite 数据库的对象,并将其设置为以字典形式返回每一行的结果。
@app.teardown_appcontext
装饰器在程序结束时自动关闭数据库连接。
在 Flask 应用程序中,我们可以使用 cursor
对象执行 SQL 查询,然后使用 fetch*()
方法获取结果。以下是一些简单的查询示例:
@app.route('/users')
def get_all_users():
conn = get_db()
cursor = conn.cursor()
cursor.execute('SELECT * FROM users')
users = cursor.fetchall()
conn.close()
return render_template('users.html', users=users)
在上面的代码中,我们定义一个 get_all_users()
视图函数,当用户访问 /users
路由时会调用该函数。该函数使用 get_db()
函数连接到 SQLite 数据库,然后执行一个简单的 SELECT
语句来获取所有用户的记录。在获取所有记录后,我们关闭连接关。
将查询结果传递到模板中,模板可以使用以下方式显示所有用户的详细信息:
<!DOCTYPE html>
<html>
<head>
<title>All Users</title>
</head>
<body>
<table>
<thead>
<tr>
<th>Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr>
<td>{{ user['name'] }}</td>
<td>{{ user['email'] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
如果我们只想获取一个用户的详细信息,可以使用以下代码:
@app.route('/users/<int:user_id>')
def get_user(user_id):
conn = get_db()
cursor = conn.cursor()
cursor.execute('SELECT * FROM users WHERE id = ?', (user_id,))
user = cursor.fetchone()
conn.close()
return render_template('user.html', user=user)
上面的代码定义了一个视图函数 get_user()
,它获取一个在 URL 中指定的用户 ID,并使用该 ID 执行一个查询。获取单个用户记录的查询方法与获取所有用户的记录类似,只是少了迭代所有用户的代码。将查询结果传递给模板,以显示用户的详细信息。
<!DOCTYPE html>
<html>
<head>
<title>{{ user.name }}</title>
</head>
<body>
<h1>{{ user.name }}</h1>
<p>Email: {{ user.email }}</p>
</body>
</html>
最后,我们演示如何执行带有条件的查询,例如按照特定条件筛选记录。以下是一个根据用户输入的名称来查询用户记录的示例:
@app.route('/users/search')
def search_users():
name = request.args.get('name')
conn = get_db()
cursor = conn.cursor()
cursor.execute('SELECT * FROM users WHERE name = ?', (name,))
users = cursor.fetchall()
conn.close()
return render_template('users.html', users=users)
在上面的代码中,我们定义一个视图 search_users()
,从 URL 中获取名字,并在查询字符串中使用该名称执行查询。然后,将查询结果传递给模板。模板的显示方式与获取所有的用户记录相同。
在 Flask 应用程序中查询 SQLite 数据库是一个相对简单的过程。我们只需要编写正确的 SQL 查询语句,然后执行并使用 fetch*()
方法获取结果即可。上面的示例演示了一些常见的查询,包括查询所有用户记录、查询单个用户记录以及带有条件的查询。