📜  Flask sqlite 数据库查询 (1)

📅  最后修改于: 2023-12-03 15:30:47.090000             🧑  作者: Mango

Flask SQLite 数据库查询

在 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*() 方法获取结果即可。上面的示例演示了一些常见的查询,包括查询所有用户记录、查询单个用户记录以及带有条件的查询。