Flask与SQLite:入门指南

Flask 与 SQLite:入门指南

在 Web 开发的世界里,Flask 凭借其轻量级和灵活性成为了 Python 开发者们的热门选择。而 SQLite,作为一个无需配置服务器的自包含数据库引擎,与 Flask 堪称天作之合,尤其适合小型项目和原型开发。本指南将带你深入了解如何将 Flask 与 SQLite 结合使用,从安装配置到构建一个简单的应用,一步步掌握两者协作的精髓。

一、 预备知识

在开始之前,确保你已经安装了 Python 3。此外,我们假设你对基本的 Web 开发概念(如 HTTP 请求、路由)以及 SQL 语言有所了解。

二、 安装 Flask 和 SQLite

1. 安装 Flask

Flask 可以通过 Python 的包管理器 pip 轻松安装:

bash
pip install Flask

2. SQLite

大多数操作系统已经预装了 SQLite。你可以通过在终端输入 sqlite3 来验证是否已安装。如果未安装,可以通过你的操作系统的包管理器进行安装。例如,在 Ubuntu 上:

bash
sudo apt-get update
sudo apt-get install sqlite3

三、 创建一个简单的 Flask 应用

让我们从一个经典的“Hello, World!”应用开始,熟悉 Flask 的基本结构。

1. 创建应用文件 (app.py)

```python
from flask import Flask

app = Flask(name)

@app.route('/')
def hello_world():
return 'Hello, World!'

if name == 'main':
app.run(debug=True)
```

这段代码创建了一个 Flask 应用实例,并定义了一个路由 /,当访问该路由时,返回 "Hello, World!"。app.run(debug=True) 启动开发服务器,debug=True 开启调试模式,便于开发过程中的错误排查和代码热重载。

2. 运行应用

在终端,导航到 app.py 所在目录,并执行:

bash
python app.py

你将在终端看到类似如下输出:

* Serving Flask app 'app' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: xxx-xxx-xxx

打开浏览器,访问 http://127.0.0.1:5000/,你将看到 "Hello, World!"。

四、 集成 SQLite 数据库

现在,让我们将 SQLite 数据库集成到 Flask 应用中。

1. 创建数据库和表

首先,我们需要创建一个数据库文件和一个用于存储数据的表。我们可以使用 Python 的 sqlite3 模块来完成。

创建一个名为 create_db.py 的文件:

```python
import sqlite3

conn = sqlite3.connect('mydatabase.db') # 连接到数据库文件(如果不存在则创建)
cursor = conn.cursor()

创建一个名为 users 的表

cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL
)
''')

conn.commit() # 提交更改
conn.close() # 关闭连接

print("Database and table created successfully.")
```

运行 python create_db.py 将在你的项目目录下创建 mydatabase.db 数据库文件,并在其中创建一个 users 表。

2. 连接到数据库

app.py 中,我们需要添加连接和关闭数据库的代码。为了避免在每个请求中都重复这些操作,我们可以利用 Flask 的 g 对象。g 对象在每个请求的生命周期内都是唯一的,可以用来存储该请求期间需要访问的数据。

更新 app.py

```python
import sqlite3
from flask import Flask, g

DATABASE = 'mydatabase.db'

app = Flask(name)
app.config.from_object(name)

def connect_db():
"""连接到指定的数据库"""
rv = sqlite3.connect(app.config['DATABASE'])
rv.row_factory = sqlite3.Row # 使查询结果像字典一样访问
return rv

def get_db():
"""如果连接不存在,则打开一个新的数据库连接"""
if not hasattr(g, 'sqlite_db'):
g.sqlite_db = connect_db()
return g.sqlite_db

@app.teardown_appcontext
def close_db(error):
"""应用上下文结束时关闭数据库连接"""
if hasattr(g, 'sqlite_db'):
g.sqlite_db.close()

@app.route('/')
def hello_world():
return 'Hello, World!'

if name == 'main':
app.run(debug=True)
```

connect_db() 函数负责建立数据库连接,get_db() 函数在 g 对象中存储数据库连接,close_db() 函数在请求结束后关闭连接。

五、 执行数据库操作

现在,我们可以开始编写与数据库交互的代码了。

1. 插入数据

让我们添加一个路由来向 users 表中插入数据。

app.py 中添加:

```python
from flask import request, redirect, url_for

@app.route('/add_user', methods=['POST'])
def add_user():
db = get_db()
db.execute('insert into users (name, email) values (?, ?)',
[request.form['name'], request.form['email']])
db.commit()
return redirect(url_for('show_users'))
```

这里,我们定义了一个 /add_user 路由,只接受 POST 请求。它从请求的表单数据中获取用户名和邮箱,然后使用参数化查询将数据插入数据库。db.commit() 提交更改。最后,重定向到 /show_users 路由(我们将在下一步中创建)。

2. 查询数据

接下来,我们添加一个路由来显示所有用户。

app.py 中添加:

```python
from flask import render_template

@app.route('/show_users')
def show_users():
db = get_db()
cur = db.execute('select * from users')
users = cur.fetchall()
return render_template('show_users.html', users=users)
```

/show_users 路由查询 users 表中的所有数据,并将结果传递给 show_users.html 模板进行渲染。

3. 创建模板

我们需要创建一个 show_users.html 模板来显示用户数据。在项目目录下创建 templates 文件夹,并在其中创建 show_users.html

```html




Show Users

Users

    {% for user in users %}

  • {{ user['name'] }} - {{ user['email'] }}
  • {% else %}

  • No users found.
  • {% endfor %}

Add User





```

这个模板使用 Jinja2 语法遍历 users 变量,显示每个用户的姓名和邮箱。同时,也创建了一个表格用于添加新用户。

六、 运行完整应用

现在,你可以运行你的应用,并测试数据库交互功能了。

  1. 运行 python app.py
  2. 打开浏览器,访问 http://127.0.0.1:5000/show_users
  3. 使用页面底部的表单添加用户。
  4. 刷新页面,你将看到新添加的用户显示在列表中。

七、 总结与展望

通过本指南,你已经学会了如何将 Flask 与 SQLite 结合使用,创建了一个简单的 Web 应用,并实现了基本的数据库操作。当然,这只是一个入门级的示例,实际开发中还有更多需要考虑的方面,例如:

  • 错误处理: 添加适当的错误处理机制,处理数据库操作可能出现的异常。
  • 安全性: 防范 SQL 注入等安全漏洞。使用参数化查询是防止 SQL 注入的有效手段,如本指南所示。
  • 数据验证: 对用户输入的数据进行验证,确保数据的合法性和完整性。
  • 模型抽象: 对于更复杂的应用,可以使用 ORM(对象关系映射)库,如 SQLAlchemy,来更方便地管理数据库交互。
  • 部署: 学习如何将 Flask 应用部署到生产环境。

希望本指南能够帮助你迈出 Flask 与 SQLite 开发的第一步。继续探索和实践,你将能够构建更强大、更复杂的 Web 应用。记住,Flask 的简洁性和 SQLite 的轻便性使它们成为快速原型开发和构建小型项目的理想选择。不断学习,不断实践,你将在 Web 开发的道路上越走越远!

THE END