简介
在本实验中,我们将学习如何使用 Python Flask 框架定义和访问 SQLite 数据库。我们将设置一个 SQLite 数据库,建立与它的连接,创建表,并初始化数据库。
注意:你需要自己创建代码文件并在环境中运行它。你可以在 Web 5000 上预览 Flask 服务状态。
This tutorial is from open-source community. Access the source code
💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版
在本实验中,我们将学习如何使用 Python Flask 框架定义和访问 SQLite 数据库。我们将设置一个 SQLite 数据库,建立与它的连接,创建表,并初始化数据库。
注意:你需要自己创建代码文件并在环境中运行它。你可以在 Web 5000 上预览 Flask 服务状态。
首先,我们需要设置一个 SQLite 数据库来存储用户和帖子。SQLite 是一个方便的选择,因为它不需要单独的数据库服务器,并且是 Python 内置的。
在我们的 Flask 应用程序中,我们将创建一个到 SQLite 数据库的连接。在 Web 应用程序中,此连接通常与请求相关联,并在工作完成后关闭。
使用 sqlite3.connect
函数建立连接,我们使用 Flask 的特殊对象 g
来存储和重用该连接。
创建一个新的 Python 文件 db.py
并添加以下代码:
## flaskr/db.py
import sqlite3
from flask import current_app, g
def get_db():
## 检查 'g' 中是否不存在 'db'
if 'db' not in g:
## 建立到数据库的连接
g.db = sqlite3.connect(
current_app.config['DATABASE'],
detect_types=sqlite3.PARSE_DECLTYPES
)
## 返回行为类似于字典的行
g.db.row_factory = sqlite3.Row
return g.db
def close_db(e=None):
## 从 'g' 中弹出 'db' 并在存在时关闭连接
db = g.pop('db', None)
if db is not None:
db.close()
在 SQLite 中,数据存储在表和列中。在我们能够存储和检索数据之前,需要先创建这些表。我们的应用程序将把用户存储在 user
表中,把帖子存储在 post
表中。
创建一个新的 SQL 文件 schema.sql
并添加以下代码:
## flaskr/schema.sql
DROP TABLE IF EXISTS user;
DROP TABLE IF EXISTS post;
CREATE TABLE user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL
);
CREATE TABLE post (
id INTEGER PRIMARY KEY AUTOINCREMENT,
author_id INTEGER NOT NULL,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
title TEXT NOT NULL,
body TEXT NOT NULL,
FOREIGN KEY (author_id) REFERENCES user (id)
);
接下来,我们将添加 Python 函数来运行创建表的 SQL 命令。将以下函数添加到 db.py
文件中:
## flaskr/db.py
def init_db():
db = get_db()
with current_app.open_resource('schema.sql') as f:
db.executescript(f.read().decode('utf8'))
@click.command('init-db')
def init_db_command():
"""Clear the existing data and create new tables."""
init_db()
click.echo('Initialized the database.')
close_db
和 init_db_command
函数需要向应用程序实例注册,以便应用程序使用。由于我们使用的是工厂函数,我们将编写一个接受应用程序并进行注册的函数。
将以下函数添加到 db.py
文件中:
## flaskr/db.py
def init_app(app):
app.teardown_appcontext(close_db)
app.cli.add_command(init_db_command)
然后,从工厂函数中导入并调用此函数。将以下代码添加到 __init__.py
文件中:
## flaskr/__init__.py
def create_app():
app =...
## 省略现有代码
from. import db
db.init_app(app)
return app
既然 init-db
已经在应用中注册,那么就可以使用 flask
命令来调用它。
运行 init-db
命令:
flask --app flaskr init-db
Initialized the database.
在这个实验中,我们学习了如何使用 Python Flask 框架来定义和访问 SQLite 数据库。我们创建了到数据库的连接,创建了表,并初始化了数据库。这对于任何需要从数据库存储和检索数据的 Web 应用程序来说都是基础。