著者はCOVID-19救済基金を選択し、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

Flask は、Python言語を使用してWebアプリケーションを構築するためのフレームワークであり、 SQLite は、Pythonでアプリケーションデータを格納するために使用できるデータベースエンジンです。 このチュートリアルでは、FlaskとSQLiteを使用して、ユーザーがToDoアイテムのリストを作成できるToDoアプリケーションを作成します。 FlaskでSQLiteを使用する方法と、1対多のデータベース関係がどのように機能するかを学習します。

1対多のデータベース関係は、あるテーブルのレコードが別のテーブルの複数のレコードを参照できる2つのデータベーステーブル間の関係です。 たとえば、ブログアプリケーションでは、投稿を保存するためのテーブルは、コメントを保存するためのテーブルと1対多の関係を持つことができます。 各投稿は多くのコメントを参照でき、各コメントは1つの投稿を参照します。 したがって、 1つの投稿は、多くのコメントと関係があります。 postテーブルは親テーブルであり、commentsテーブルは子テーブルです。親テーブルのレコードは、子テーブルの多くのレコードを参照できます。 これは、各テーブルの関連データにアクセスできるようにするために重要です。

SQLiteは移植性があり、Pythonで動作するために追加の設定を必要としないため、SQLiteを使用します。 また、MySQLやPostgresなどのより大きなデータベースに移動する前にアプリケーションのプロトタイプを作成する場合にも最適です。 適切なデータベースシステムを選択する方法の詳細については、 SQLiteとMySQLとPostgreSQL:リレーショナルデータベース管理システムの比較の記事を参照してください。

前提条件

このガイドに従う前に、次のものが必要です。

  • ローカルPython3プログラミング環境については、ローカルマシン用のPython3シリーズのローカルプログラミング環境をインストールおよびセットアップする方法のチュートリアルに従ってください。 このチュートリアルでは、プロジェクトディレクトリをflask_todoと呼びます。
  • ルートの作成、HTMLテンプレートのレンダリング、SQLiteデータベースへの接続などの基本的なFlaskの概念の理解。 これらの概念に精通していない場合は、 Python 3でFlaskを使用してWebアプリケーションを作成する方法に従うことができますが、必須ではありません。

ステップ1—データベースの作成

このステップでは、プログラミング環境をアクティブ化し、Flaskをインストールし、SQLiteデータベースを作成して、サンプルデータを入力します。 外部キーを使用して、リストとアイテムの間に1対多の関係を作成する方法を学習します。 外部キーは、データベーステーブルを別のテーブルに関連付けるために使用されるキーであり、子テーブルとその親テーブルの間のリンクです。

プログラミング環境をまだアクティブ化していない場合は、プロジェクトディレクトリ(flask_todo)にいることを確認し、次のコマンドを使用してアクティブ化します。

  1. source env/bin/activate

プログラミング環境がアクティブ化されたら、次のコマンドを使用してFlaskをインストールします。

  1. pip install flask

インストールが完了すると、ToDoデータを格納するために必要なテーブルを作成するためのSQLコマンドを含むデータベーススキーマファイルを作成できるようになります。 ToDoリストを格納するためのlistsというテーブルと、各リストの項目を格納するためのitemsテーブルの2つのテーブルが必要になります。

flask_todoディレクトリ内にあるschema.sqlというファイルを開きます。

  1. nano schema.sql

このファイル内に次のSQLコマンドを入力します。

フラスコ_todo/schema.sql
DROP TABLE IF EXISTS lists;
DROP TABLE IF EXISTS items;

CREATE TABLE lists (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    title TEXT NOT NULL
);

CREATE TABLE items (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    list_id INTEGER NOT NULL,
    created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    content TEXT NOT NULL,
    FOREIGN KEY (list_id) REFERENCES lists (id)
);

ファイルを保存して閉じます。

最初の2つのSQLコマンドはDROP TABLE IF EXISTS lists;DROP TABLE IF EXISTS items;です。これらは、listsitemsという名前の既存のテーブルを削除するため、混乱を招く動作は見られません。 これにより、これらのSQLコマンドを使用するたびにデータベースにあるすべてのコンテンツが削除されるため、このチュートリアルを終了して最終結果を試すまで、Webアプリケーションに重要なコンテンツを書き込まないようにしてください。

次に、CREATE TABLE listsを使用して、次の列を持つTo Doリスト(学習リスト、作業リスト、ホームリストなど)を格納するlistsテーブルを作成します。

  • id主キーを表す整数。これには、各エントリのデータベースによって一意の値が割り当てられます(つまり、 やることリスト)。
  • created:やることリストが作成された時刻。 NOT NULLは、この列が空であってはならないことを意味し、DEFAULT値はCURRENT_TIMESTAMP値であり、リストがデータベースに追加された時刻です。 idと同様に、この列の値は自動的に入力されるため、指定する必要はありません。
  • title:リストのタイトル。

次に、itemsというテーブルを作成して、やること項目を保存します。 このテーブルには、ID、アイテムが属するリストを識別するためのlist_id整数列、作成日、およびアイテムのコンテンツがあります。 アイテムをデータベース内のリストにリンクするには、外部キー制約と行FOREIGN KEY (list_id) REFERENCES lists (id)を使用します。 ここで、listsテーブルは親テーブルであり、外部キー制約によって参照されているテーブルです。これは、リストに複数のアイテムを含めることができることを示しています。 itemsテーブルは、子テーブルであり、制約が適用されるテーブルです。 これは、アイテムが単一のリストに属していることを意味します。 list_id列は、lists親テーブルのid列を参照します。

リストには多くのアイテムを含めることができ、アイテムは 1つのリストにのみ属するため、listsテーブルとitemsテーブルの関係は[ X155X]1対多