Flaskでデータを更新・削除する方法!SQLAlchemyの便利な操作を学ぼう
生徒
「Flaskで保存したデータを変えたり、消したりするにはどうすればいいですか?」
先生
「FlaskではSQLAlchemyと呼ばれる道具を使うことで、プログラムの中で簡単にデータ更新や削除ができるんです」
生徒
「更新と削除って難しそう……専門用語がいっぱいで不安です」
先生
「順を追って説明しますね。更新は 'Update'、削除は 'Delete'、CRUDという基本操作の一部です」
1. CRUDとは?
データベースでよく使う基本操作CRUDは、Create(作成)、Read(取得)、Update(更新)、Delete(削除)の頭文字です。
今回はその中のUpdateとDeleteに焦点を当てます。
2. SQLAlchemy(エスキューエルアルケミー)とは?
SQLAlchemyは、Pythonコードだけでデータベースの操作を簡単にできる仕組み(ORMと呼ぶ)です。難しいSQL文を書かなくても大丈夫!
3. 前準備:モデルとデータの例
まず、FlaskとSQLAlchemyの準備が済んでいることが前提です。以下は、ユーザー情報を扱うモデルの例です。
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)
4. データを更新(Update)してみよう
「Update(アップデート)」とは、保存済みのデータを新しい値に変える操作です。やり方は次の通りです:
@app.route("/update/<int:user_id>", methods=["POST"])
def update_user(user_id):
user = User.query.get(user_id)
user.name = request.form.get("name")
user.email = request.form.get("email")
db.session.commit()
return f"ユーザー{user_id}を更新しました!"
User.query.get(user_id)は「IDでユーザーを取り出す」user.name = …とすることで「名前を新しい値に変更」db.session.commit()を呼ぶことで変更を保存します
5. データを削除(Delete)してみよう
「Delete(デリート)」とは、不要なデータを消す操作です。例えば、以下のように書きます:
@app.route("/delete/<int:user_id>", methods=["POST"])
def delete_user(user_id):
user = User.query.get(user_id)
db.session.delete(user)
db.session.commit()
return f"ユーザー{user_id}を削除しました!"
db.session.delete(user)で削除し、commit()で確定します
6. フォームで更新・削除できるようにしよう
ブラウザで操作できるよう、HTMLフォームを用意します。
<form action="/update/1" method="post">
名前:<input name="name"><br>
メール:<input name="email"><br>
<input type="submit" value="更新">
</form>
<form action="/delete/1" method="post">
<input type="submit" value="削除">
</form>
7. 注意点と失敗しがちなポイント
- 存在しないIDを指定するとエラーになります。
get_or_404()を使うと安全です。 - フォームで送られてくる値は文字列なので、数値に変える必要がある場合は注意が必要です。
commit()を忘れると変更が保存されません
8. SQLAlchemyの便利なポイント
SQLAlchemyでは、UpdateやDeleteの操作がPythonコードだけで簡単に書けます。直感的なコードで、データベースに詳しくなくても扱いやすいのがメリットです。
まとめ
Flaskでの更新処理と削除処理は、最初は専門的な言葉が多くてとっつきにくく感じるかもしれませんが、実際に手を動かしてみると意外なほど直感的に理解できます。特にSQLAlchemyを使うと、複雑なSQL文を直接書かなくてもよくなり、Pythonらしい表現でデータの変更や削除を細かく操作できるようになります。こうした操作は、Webアプリケーションでは非常に頻繁に利用されるため、初心者のうちにしっかり身につけておくとその後の開発が驚くほどスムーズになります。また、更新や削除を安全に行うためには、存在しないIDに対する処理やフォームから送られてくる値の型の扱いなど、意識しておきたい細かな注意点も多くあります。 こうしたポイントを丁寧に押さえておくことで、後になってアプリの動作が不安定になったり、思わぬエラーに悩まされたりするリスクを減らすことにもつながります。とくに実務や本格的な開発を目指す場合には、データ更新の流れをしっかり理解し、データベースとフォーム入力の橋渡しを正しく扱えるようになることはとても重要です。 今回の記事では、実際のコードとともに更新処理と削除処理の流れをひとつひとつ確認しながら整理しました。実際の開発では、入力チェックや不正アクセス防止のための追加処理など、さらに高度な仕組みも必要になりますが、その入り口として今回の仕組みを理解しておけば、より発展的な内容にも自然と踏み込んでいけるはずです。特に、フォーム入力とルートで受け取る値がどのようにつながっているか、そして取得したオブジェクトのプロパティを変更してコミットするだけで更新が完了するという流れは、Flaskでデータを扱う基本そのものといえます。 更新処理と削除処理は、単純なようでいて実はアプリケーションの本質に深く関わる部分です。データの整合性を守りながら、利用者が安心して使えるアプリを作るためには欠かせない知識です。今回の内容をしっかり自分の中で整理し、サンプルコードを自分の手で書き換えて試してみることで、さらに理解が定着していくでしょう。ひとつひとつの操作がつながって見えるようになると、データベースを使った開発の世界が一気に広がります。
サンプルプログラム(確認用)
振り返りとして、よく使う更新処理の基本構造を以下にまとめておきます。
@app.route("/edit/<int:user_id>", methods=["POST"])
def edit_user(user_id):
user = User.query.get_or_404(user_id)
user.name = request.form.get("name")
user.email = request.form.get("email")
db.session.commit()
return "更新が完了しました"
削除処理も同じ流れで、対象となるレコードを取り出して削除し、最後にコミットするという非常にわかりやすい構造になっています。こうした素直な処理の組み合わせが理解できると、次は複雑な条件での検索や、関連テーブルを使った操作など、より広い範囲の機能にも挑戦しやすくなります。まずは基本の流れを自分のアプリに取り入れながら、試行錯誤してみることがおすすめです。
生徒
「今日の内容で、更新と削除の流れがだいぶ分かってきた気がします。特にコミットが大切だっていうのが印象に残りました。」
先生
「そうですね。コミットを忘れると実際には何も変わらないので、忘れずに意識することが大事です。変更した値が正しく反映される仕組みを理解しておくと、応用が効くようになりますよ。」
生徒
「削除も思ったより簡単でした。対象を取り出して削除してコミットするだけなんですね。」
先生
「その通りです。シンプルな構造ですが、安全に扱うためにIDのチェックやエラー処理をきちんと整えると実際の開発でも使いやすくなります。」
生徒
「次はもっと複雑な条件検索とか、関連テーブルの更新にも挑戦してみたいです!」
先生
「いいですね。まず今回の基本をしっかり身につけることが、その先のステップにつながりますよ。」