Python Flask を使った SQLite データベースのセットアップ

FlaskFlaskBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Python Flaskフレームワークを使用してSQLiteデータベースを定義およびアクセスする方法を学びます。SQLiteデータベースをセットアップし、それとの接続を確立し、テーブルを作成し、データベースを初期化します。

注: コードファイルは自分で作成し、環境で実行する必要があります。Web 5000でFlaskサービスの状態をプレビューできます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL flask(("Flask")) -.-> flask/CoreConceptsGroup(["Core Concepts"]) flask(("Flask")) -.-> flask/DevelopmentToolsGroup(["Development Tools"]) flask(("Flask")) -.-> flask/DataHandlingGroup(["Data Handling"]) flask/DataHandlingGroup -.-> flask/incoming_request_data("Incoming Request Data") flask/DataHandlingGroup -.-> flask/application_globals("Application Globals") flask/DataHandlingGroup -.-> flask/response_objects("Response Objects") flask/CoreConceptsGroup -.-> flask/application_object("Application Object") flask/CoreConceptsGroup -.-> flask/sessions("Sessions") flask/CoreConceptsGroup -.-> flask/session_interface("Session Interface") flask/CoreConceptsGroup -.-> flask/useful_internals("Useful Internals") flask/DevelopmentToolsGroup -.-> flask/blueprint_objects("Blueprint Objects") flask/DevelopmentToolsGroup -.-> flask/command_line_interface("Command Line Interface") subgraph Lab Skills flask/incoming_request_data -.-> lab-136336{{"Python Flask を使った SQLite データベースのセットアップ"}} flask/application_globals -.-> lab-136336{{"Python Flask を使った SQLite データベースのセットアップ"}} flask/response_objects -.-> lab-136336{{"Python Flask を使った SQLite データベースのセットアップ"}} flask/application_object -.-> lab-136336{{"Python Flask を使った SQLite データベースのセットアップ"}} flask/sessions -.-> lab-136336{{"Python Flask を使った SQLite データベースのセットアップ"}} flask/session_interface -.-> lab-136336{{"Python Flask を使った SQLite データベースのセットアップ"}} flask/useful_internals -.-> lab-136336{{"Python Flask を使った SQLite データベースのセットアップ"}} flask/blueprint_objects -.-> lab-136336{{"Python Flask を使った SQLite データベースのセットアップ"}} flask/command_line_interface -.-> lab-136336{{"Python Flask を使った SQLite データベースのセットアップ"}} end

データベースのセットアップ

まず、ユーザーと投稿を保存するための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アプリケーションにとって、これは基本となるものです。