Flaskは、Pythonで書かれた軽量なWebフレームワークで、簡単にWebアプリケーションを開発できることから非常に人気があります。Flaskを使って、社員管理システムを作成し、データベースとの連携を簡単に行うために、Flask-SQLAlchemyを使用する方法について説明します。このガイドでは、FlaskとFlask-SQLAlchemyを使用して社員管理システムを開発し、データの操作や管理をどのように行うかを学びます。
1. Flaskのインストールとプロジェクトの設定
まず、FlaskとFlask-SQLAlchemyをインストールする必要があります。これらはPythonのパッケージマネージャであるpipを使ってインストールできます。
bashpip install Flask pip install Flask-SQLAlchemy
次に、Flaskアプリケーションを作成します。新しいディレクトリを作成し、app.pyというファイルを作成しましょう。
bashmkdir employee_management
cd employee_management
touch app.py
app.pyには、基本的なFlaskアプリケーションの設定を行います。
pythonfrom flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///employees.db' # SQLiteデータベースの設定
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # トラッキングを無効にする
db = SQLAlchemy(app)
@app.route('/')
def index():
employees = Employee.query.all() # データベースからすべての社員を取得
return render_template('index.html', employees=employees)
if __name__ == '__main__':
app.run(debug=True)
このコードでは、FlaskとFlask-SQLAlchemyをインポートし、employees.dbというSQLiteデータベースを使用する設定を行っています。
2. データベースの設定とモデルの作成
Flask-SQLAlchemyでは、データベースのモデルをPythonのクラスとして定義します。次に、Employeeというクラスを定義し、社員情報を保存できるようにします。以下のコードをapp.pyに追加しましょう。
pythonclass Employee(db.Model):
id = db.Column(db.Integer, primary_key=True) # 主キー
name = db.Column(db.String(100), nullable=False) # 社員の名前
position = db.Column(db.String(100), nullable=False) # 職位
department = db.Column(db.String(100), nullable=False) # 部署
email = db.Column(db.String(100), unique=True, nullable=False) # メールアドレス
def __repr__(self):
return f'{self.name} >'
Employeeクラスには、id, name, position, department, emailというカラムがあります。idは主キーであり、他のカラムは社員の名前、職位、部署、メールアドレスを格納します。
次に、データベースを初期化するために以下のコードを追加します。
python@app.before_first_request
def create_tables():
db.create_all() # データベースのテーブルを作成
これで、アプリケーションを最初に実行する際に、employeesテーブルが自動的に作成されます。
3. データの追加と表示
社員のデータを追加するためのフォームを作成しましょう。まず、templatesというディレクトリを作成し、その中にindex.htmlというファイルを作成します。
bashmkdir templates
touch templates/index.html
index.htmlには、社員のリストを表示するHTMLコードを追加します。
htmlhtml>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>社員管理システムtitle>
head>
<body>
<h1>社員リストh1>
<table border="1">
<thead>
<tr>
<th>IDth>
<th>名前th>
<th>職位th>
<th>部署th>
<th>メールアドレスth>
tr>
thead>
<tbody>
{% for employee in employees %}
<tr>
<td>{{ employee.id }}td>
<td>{{ employee.name }}td>
<td>{{ employee.position }}td>
<td>{{ employee.department }}td>
<td>{{ employee.email }}td>
tr>
{% endfor %}
tbody>
table>
body>
html>
このHTMLコードでは、社員のデータをテーブル形式で表示しています。{% for employee in employees %}の部分で、Flaskが渡したemployeesというリストを反復処理して、社員情報を表示しています。
次に、社員を追加するフォームを作成します。index.htmlに以下のようなフォームを追加します。
html<h2>新しい社員を追加h2>
<form method="POST" action="/add_employee">
<label for="name">名前:label>
<input type="text" id="name" name="name" required><br><br>
<label for="position">職位:label>
<input type="text" id="position" name="position" required><br><br>
<label for="department">部署:label>
<input type="text" id="department" name="department" required><br><br>
<label for="email">メールアドレス:label>
<input type="email" id="email" name="email" required><br><br>
<button type="submit">追加button>
form>
4. データの追加処理
社員を追加するためのルートを作成します。POSTリクエストを処理して、新しい社員データをデータベースに追加するためのコードを追加します。
python@app.route('/add_employee', methods=['POST'])
def add_employee():
name = request.form['name']
position = request.form['position']
department = request.form['department']
email = request.form['email']
new_employee = Employee(name=name, position=position, department=department, email=email)
db.session.add(new_employee) # 新しい社員をデータベースに追加
db.session.commit() # 変更を確定
return redirect(url_for('index')) # 社員リストのページにリダイレクト
このコードは、POSTメソッドで送信されたフォームデータを取得し、新しいEmployeeオブジェクトを作成してデータベースに追加します。その後、commitメソッドで変更を確定し、社員リストのページにリダイレクトします。
5. アプリケーションの実行
すべてのコードが整ったら、アプリケーションを実行してみましょう。
bashpython app.py
ブラウザでhttp://127.0.0.1:5000/にアクセスすると、社員リストと新しい社員を追加するフォームが表示されます。
結論
これで、FlaskとFlask-SQLAlchemyを使って簡単な社員管理システムを作成しました。社員データをデータベースに保存し、追加したデータをWebページに表示することができます。このシステムを拡張して、社員の情報を編集したり削除したりする機能を追加することも可能です。
