Flaskでのデータベース接続の全て

この記事では、PythonのWebフレームワークであるFlaskを使用してデータベースに接続する方法について解説します。基本的なデータベース接続からSQLAlchemyを使った高度なテクニック、さらに応用例まで詳しく説明します。

目次

Flaskとは

FlaskはPythonで書かれた軽量なWebフレームワークです。簡易的なAPIから複雑なWebアプリケーションまで、幅広い用途で使用されています。

データベースとの接続の重要性

Webアプリケーションにおいて、データベースとの接続はほぼ避けられない作業です。ユーザーデータの保存、検索機能の提供、認証など、多くの機能がデータベースに依存しています。

基本的なデータベース接続

Pythonのsqlite3モジュールを使って簡単なデータベース接続を行う方法を見てみましょう。

コード例

from flask import Flask
import sqlite3

app = Flask(__name__)

@app.route('/connect')
def connect_db():
    # データベースに接続
    con = sqlite3.connect("test.db")
    # コネクションを閉じる
    con.close()
    return "データベースに接続しました"

コード解説

このコードでは、Flaskのアプリケーション内で`sqlite3.connect`関数を使用してデータベース`test.db`に接続しています。`con.close()`でコネクションを閉じています。

SQLAlchemyを使用した高度な接続

インストール

pip install Flask-SQLAlchemy

コード例

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True)

コード解説

`Flask-SQLAlchemy`を使用すると、ORM(Object-Relational Mapping)を利用してより簡単にデータベース操作が可能になります。`app.config[‘SQLALCHEMY_DATABASE_URI’]`でデータベースの場所を指定し、`SQLAlchemy(app)`でデータベースに接続します。

応用例1: ユーザー認証

FlaskとSQLAlchemyを使って簡単なユーザー認証機能を実装する例です。

コード例

from flask import Flask, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash, check_password_hash

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True)
    password = db.Column(db.String(50))

@app.route('/register', methods=['POST'])
def register():
    username = request.form['username']
    password = generate_password_hash(request.form['password'])
    new_user = User(username=username, password=password)
    db.session.add(new_user)
    db.session.commit()
    return redirect(url_for('login'))

コード解説

この例では、パスワードをハッシュ化する`werkzeug.security`も使用しています。`generate_password_hash`関数でパスワードをハッシュ化し、データベースに保存します。

応用例2: データフィルタリング

データベースから特定の条件でデータをフィルタリングする方法です。

コード例

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)

class Product(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    price = db.Column(db.Float)

@app.route('/filter')
def filter_data():
    # 価格が100以上の商品をフィルタリング
    expensive_items = Product.query.filter(Product.price > 100).all()
    return str([item.name for item in expensive_items])

コード解説

`Product.query.filter(Product.price > 100).all()`この部分で、価格が100以上の商品を全て取得しています。

まとめ

Flaskを用いてデータベースに接続する方法は多く存在しますが、基本的な方法から高度な方法まで解説しました。これを機に、Flaskでより高度なデータベース操作を行ってみてはいかがでしょうか。

コメント

コメントする

目次