この記事では、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でより高度なデータベース操作を行ってみてはいかがでしょうか。
コメント