Flaskでフォームとデータベースを連携する方法を初心者向けに解説!Pythonで簡単Webアプリ開発
生徒
「Flaskを使って、Webページのフォームから入力した情報をデータベースに保存する方法ってありますか?」
先生
「はい、Flaskではフォームとデータベースを連携して、ユーザーが入力したデータを簡単に保存することができますよ。」
生徒
「どうやって作るんですか?初心者でもできる方法が知りたいです!」
先生
「それでは、ひとつずつステップを追ってわかりやすく説明していきましょう。」
1. Flaskとは?フォームって何?
Flask(フラスク)は、Pythonで動く軽量なWebアプリ開発フレームワークで、初心者でも直感的に扱えるのが特徴です。必要な機能だけを後から自由に追加できるため、「まずは簡単な仕組みから作ってみたい」という人にぴったりです。
そして、フォームとはユーザーが情報を入力するための入口のようなものです。名前、メールアドレス、問い合わせ内容などを入力するスペースがあり、その内容を「送信ボタン」でサーバーへ送ります。日常的に目にする予約フォームやアンケートの入力欄も同じ仕組みで動いています。
例えば、次のようなとても簡単なフォームを想像するとイメージしやすくなります。
<form>
<label>お名前:</label>
<input type="text" placeholder="山田太郎"><br>
<button>送信</button>
</form>
このように、フォームは「ユーザーが入力 → サーバーが受け取る」という橋渡しの役割を持っています。今回の記事では、このフォームから送られたデータをFlaskを使ってデータベースに保存する流れを、できるだけ分かりやすく解説していきます。
2. データベースってなに?どう使うの?
データベースとは、たくさんの情報をきれいに整理して保存できる倉庫のようなものです。ノートやメモ帳に書き散らした情報を、後から探しやすい形でまとめておくイメージだと考えるとわかりやすいでしょう。
たとえば、フォームから送られてくる「ユーザーの名前」や「メールアドレス」「問い合わせ内容」などを、行と列がある表のような形で保管しておき、必要になったときに取り出したり、更新したり、削除したりできます。小さなアプリでも、登録する人が増えてくると、手作業では管理しきれなくなるので、データベースが本領を発揮します。
イメージをつかみやすくするために、まずはデータベースを使わずにPythonのリストに情報を入れてみる例を見てみましょう。
# データベースの代わりにリストに保存するイメージ
users = []
users.append({"name": "山田太郎", "email": "taro@example.com"})
users.append({"name": "鈴木花子", "email": "hanako@example.com"})
print(users)
このように、Pythonだけでも一時的にデータを持っておくことはできますが、プログラムを終了すると中身は消えてしまいます。また、データが増えると検索や更新も大変です。そこで登場するのがデータベースで、情報を長期間安全に保存し、必要なときに素早く取り出せるようにしてくれます。
Flaskでは、SQLAlchemy(エスキューエルアルケミー)という機能を使うことで、難しいデータベースの操作を意識せずに、Pythonのコードだけで情報の保存・取得・更新などを行えるようになります。あとで出てくるモデル(設計図)と組み合わせることで、「フォームで受け取った値をそのままデータベースにしまっておく」という流れを自然に書けるようになります。
3. 必要な準備:Flaskとライブラリのインストール
まずは、Flaskでフォームとデータベースを連携するための「道具」をパソコンに入れておきましょう。Pythonがインストールされていることを前提に、ターミナル(Windowsなら「コマンドプロンプト」や「PowerShell」、Macなら「ターミナル」)を開き、次のコマンドをそのまま入力します。
pip install flask flask_sqlalchemy
flaskはWebアプリを作るためのフレームワーク、flask_sqlalchemyはデータベースとやり取りするためのライブラリです。どちらも、フォームの入力内容をデータベースに保存するために欠かせないものです。
もし「pip という言葉がよく分からない…」という場合は、Python用のアプリを追加・管理するためのコマンドだと考えておけば大丈夫です。スマホでアプリをインストールするのと同じように、「Python用のアプリ(ライブラリ)を追加してくださいね」と指示しているイメージです。
インストールが終わったか不安なときは、次のような簡単なチェック用スクリプトを実行してみましょう。
# ライブラリが正しくインストールされているか確認するサンプル
import flask
import flask_sqlalchemy
print("FlaskとFlask-SQLAlchemyを読み込めました!")
このスクリプトを保存して実行し、メッセージが表示されれば準備は完了です。ここまでで、Flaskアプリを動かすための土台が整い、次のステップから実際のWebアプリ開発に進める状態になります。
4. Flaskアプリの基本構成を作ろう
必要なライブラリがインストールできたら、いよいよFlaskアプリ本体の「土台」を用意していきます。ここでは、フォームやデータベースと連携する前の段階として、最小限の設定とお決まりの書き方を押さえておきましょう。一度型を覚えてしまえば、今後のFlask開発でも何度も使い回せる基本パターンになります。
まずは、Flaskアプリとデータベースの接続設定をまとめたサンプルコードを見てみます。
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
# Flaskアプリの「本体」を作成する
app = Flask(__name__)
# どのデータベースを使うかを設定する(ここでは sample.db というファイル)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///sample.db'
# Flaskアプリとデータベースをつなぐためのオブジェクト
db = SQLAlchemy(app)
最初のfrom flask import Flask, render_template, requestでは、Flaskアプリを動かすために必要な機能を読み込んでいます。Flaskはアプリ本体を作るためのクラス、render_templateはHTMLファイルを表示するときに使う関数、requestはフォームから送られてきたデータを受け取るときに使います。
app = Flask(__name__)は、「これからFlaskアプリを作ります」という宣言です。__name__という特別な変数を渡しておくことで、Flaskがファイルの場所を理解し、テンプレートや設定ファイルを正しく探せるようになります。
続いて、app.config['SQLALCHEMY_DATABASE_URI']にデータベースの場所を指定しています。sqlite:///sample.dbという書き方は、「同じフォルダにある sample.db という名前のSQLiteデータベースを使う」という意味になります。ファイル1つで完結するので、練習用の小さなWebアプリにはちょうど良い選択です。
最後のdb = SQLAlchemy(app)は、Flaskアプリとデータベースをつないでくれる「橋」のような役割です。このdbオブジェクトを通じて、後のステップでモデル(データの設計図)を定義したり、実際にデータを保存したりできるようになります。
ここまでだと少しイメージが湧きにくいかもしれないので、「とりあえず動く一番シンプルな画面」を追加したミニサンプルも載せておきます。
@app.route("/")
def hello():
return "Flaskアプリが正しく動いています!"
このコードは、「/(トップページ)」にアクセスしたときに、ブラウザの画面に文字列を表示するだけのシンプルなものです。先ほどの基本構成と組み合わせて実行すると、まずはFlaskアプリが正しく起動しているかを確認できます。この土台がしっかりできていれば、次のステップでフォームやデータベースを組み合わせていくときもスムーズに進められます。
5. データの形を決める:モデルを作る
モデルとは、どんなデータを保存するのかを決める設計図です。例えば「名前とメールアドレスを保存したい」と思ったら、こんなふうに書きます。
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
idは自動で番号がつくようになっていて、nameとemailは、文字の情報を保存する項目です。
6. HTMLでフォームを作ろう
次に、ユーザーが情報を入力できるフォームをHTMLで作ります。Flaskではtemplatesというフォルダの中にHTMLファイルを置きます。
<form method="POST">
<label for="name">名前:</label>
<input type="text" name="name" required><br>
<label for="email">メールアドレス:</label>
<input type="email" name="email" required><br>
<button type="submit">登録</button>
</form>
method="POST"は、情報をサーバーに送る方法の一つです。
7. フォームのデータを受け取って保存する
Python側では、ユーザーが入力した内容を受け取って、データベースに保存する処理を書きます。
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
name = request.form['name']
email = request.form['email']
new_user = User(name=name, email=email)
db.session.add(new_user)
db.session.commit()
return "登録が完了しました!"
return render_template('form.html')
request.formを使って、フォームの入力内容を取り出しています。
db.session.add()とcommit()で、実際にデータベースに保存しています。
8. 最後にテーブル(箱)を作る
モデルを作っただけでは、まだデータを入れる箱ができていません。Pythonで次のように書いてテーブルを作ります。
with app.app_context():
db.create_all()
この一文を実行すると、sample.dbというファイルの中にデータを入れる箱(テーブル)が作られます。
9. Webアプリを起動して使ってみよう
最後に、FlaskのWebアプリを起動します。
if __name__ == '__main__':
app.run(debug=True)
ブラウザで http://127.0.0.1:5000/ にアクセスすると、フォームが表示され、情報を入力して登録できます。
まとめ
Flaskでフォームとデータベースを連携する仕組みを学んできましたが、改めて振り返ると、初心者が最初につまずきやすい部分を自然な流れで理解できる内容だったのではないかと思います。フォームという入力欄から送信された情報が、どのようにサーバーに渡り、さらにデータベースへと保存されていくのか。その一連の流れを丁寧に確認していくことで、Webアプリの裏側でどのような処理が行われているのかが少しずつ見えてきます。
特に、入力した内容を受け取るrequest.formの仕組みや、作成したモデルにデータを入れてdb.session.add()、commit()で保存する流れは、どんなアプリにも共通する基礎となる部分です。この動きが理解できれば、ユーザー登録、コメント投稿、メッセージ保存など、さまざまな機能の応用が可能になります。データベースがなぜ必要なのか、モデルによってデータの形をどう決めるのかを学んだことで、Webアプリの構成が頭の中で整理されていく感覚がつかめたのではないでしょうか。
また、HTML側でフォームを作り、Python側で受け取り、さらにSQLiteという軽量データベースに保存するという一連の流れは、初心者でも着実にステップを踏んで成長できる構造になっています。入力欄を増やしたいとき、データを取り出して画面に表示したいときなど、今回の学びがそのまま土台になります。特にFlaskとSQLAlchemyの組み合わせは柔軟で扱いやすく、少しずつアプリを育てていく楽しさを感じられる点も大きな魅力です。
ここでは、実際にフォームから送られた情報を保存し、その内容を別のページで確認できる簡単なサンプルコードを載せています。今回学んだ流れを整理するための参考として確認してみてください。
サンプルプログラムで流れをもう一度確認
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///memo.db'
db = SQLAlchemy(app)
class Memo(db.Model):
id = db.Column(db.Integer, primary_key=True)
content = db.Column(db.String(200), nullable=False)
@app.route('/', methods=['GET','POST'])
def index():
if request.method == 'POST':
text = request.form['content']
memo = Memo(content=text)
db.session.add(memo)
db.session.commit()
return "保存が完了しました!"
return render_template('memo_form.html')
@app.route('/list')
def list_memo():
memos = Memo.query.all()
return "<br>".join([m.content for m in memos])
if __name__ == "__main__":
with app.app_context():
db.create_all()
app.run()
このサンプルでは、フォームから文章を送信するとそのままデータベースに保存され、別のページで一覧として取り出せるようになっています。実際に動かしてみると、フォーム入力から保存、そして取り出しまでの流れが直感的につかめるはずです。フォームとデータベースの連携はFlaskの基本でもあり、これを覚えておけば、より複雑なユーザー管理や投稿機能なども自然に発展させることができます。 最初は難しく感じる部分があっても、少しずつコードを書き、動きを確認しながら学んでいくことで理解が深まります。実際に動くアプリが手の中で育っていく感覚はとても楽しく、今後の学習意欲につながる大きなステップになります。
生徒
「フォームから入力した内容がデータベースに保存されるって、実際に動かしてみるとすごく感動しますね!」
先生
「そうでしょう。画面で入力したものが裏側でしっかり管理されていると、アプリらしさが一気に増しますよね。」
生徒
「モデルで形を決めて、フォームで入力して、Pythonで受け取って保存する…流れがつながってきました!」
先生
「その理解ができれば十分ですよ。あとは取り出す処理や編集する処理を追加していけば、一気に本格的なアプリになっていきます。」
生徒
「次はユーザー管理とかコメント投稿みたいな機能も挑戦してみたいです!」