はじめに
この実験では、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():
## 'db' が 'g' にないことを確認する
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)
);
次に、テーブルを作成するためのSQLコマンドを実行するPython関数を追加します。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アプリケーションにとって、これは基本となるものです。