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
Users
-
{% for user in users %}
- {{ user['name'] }} - {{ user['email'] }}
- No users found.
{% else %}
{% endfor %}
Add User
```
这个模板使用 Jinja2 语法遍历 users
变量,显示每个用户的姓名和邮箱。同时,也创建了一个表格用于添加新用户。
六、 运行完整应用
现在,你可以运行你的应用,并测试数据库交互功能了。
- 运行
python app.py
。 - 打开浏览器,访问
http://127.0.0.1:5000/show_users
。 - 使用页面底部的表单添加用户。
- 刷新页面,你将看到新添加的用户显示在列表中。
七、 总结与展望
通过本指南,你已经学会了如何将 Flask 与 SQLite 结合使用,创建了一个简单的 Web 应用,并实现了基本的数据库操作。当然,这只是一个入门级的示例,实际开发中还有更多需要考虑的方面,例如:
- 错误处理: 添加适当的错误处理机制,处理数据库操作可能出现的异常。
- 安全性: 防范 SQL 注入等安全漏洞。使用参数化查询是防止 SQL 注入的有效手段,如本指南所示。
- 数据验证: 对用户输入的数据进行验证,确保数据的合法性和完整性。
- 模型抽象: 对于更复杂的应用,可以使用 ORM(对象关系映射)库,如 SQLAlchemy,来更方便地管理数据库交互。
- 部署: 学习如何将 Flask 应用部署到生产环境。
希望本指南能够帮助你迈出 Flask 与 SQLite 开发的第一步。继续探索和实践,你将能够构建更强大、更复杂的 Web 应用。记住,Flask 的简洁性和 SQLite 的轻便性使它们成为快速原型开发和构建小型项目的理想选择。不断学习,不断实践,你将在 Web 开发的道路上越走越远!