はじめに
このプロジェクトでは、SQLite をデータベースとして使用して Flask で REST API を構築する方法を学びます。まず、サンプルの SQLite データベースを作成し、いくつかのデータを入力します。次に、SQLite データベース内のデータに対して CRUD(作成、読み取り、更新、削除)操作を実行するエンドポイントを持つ Flask アプリケーションを構築します。
👀 プレビュー

🎯 タスク
このプロジェクトでは、以下のことを学びます。
- SQLite をデータベースバックエンドとして使用した Flask アプリケーションを作成する方法
- サンプルの SQLite データベースとテーブルを作成する方法
- サンプルデータをデータベーステーブルに入力する方法
- すべてのユーザーを取得し、ID で特定のユーザーを取得し、新しいユーザーを作成し、既存のユーザーを更新し、ユーザーを削除するエンドポイントを実装する方法
- cURL またはブラウザを使用して REST API エンドポイントをテストする方法
🏆 達成目標
このプロジェクトを完了した後、以下のことができるようになります。
- SQLite をデータベースとして使用した Flask アプリケーションを構築する
- Flask を使用して SQLite データベース内のデータに対して CRUD 操作を実行する
- Flask アプリケーションの REST API エンドポイントを実装してテストする
プロジェクトファイルを作成する
Flask アプリケーションに必要なプロジェクトファイルを作成して始めましょう。
cdコマンドを使用して~/projectディレクトリに移動します。- プロジェクトディレクトリ内に、
app.pyという名前の新しい Python ファイルを作成します。 - 同じディレクトリに
create_database.pyという名前の新しいファイルを作成します。
cd ~/project
touch app.py create_database.py
あなたのプロジェクト構造は次のようになるはずです。
project/
├── app.py
└── create_database.py
サンプルの SQLite データベースを作成する
次に、Python と SQLite ライブラリを使用して SQLite データベースを作成し、サンプルデータを入力しましょう。
create_database.py ファイルに、必要なモジュールをインポートするための次のコードを追加します。
import sqlite3
データベースとテーブルを作成するための次のコードを追加します。
## Create a connection to the database
conn = sqlite3.connect('example.db')
## Create a cursor object to execute SQL statements
cursor = conn.cursor()
## Create a table called "users"
cursor.execute('''CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT,
email TEXT
)''')
次に、いくつかのサンプルデータをテーブルに挿入しましょう。
## Insert sample data into the "users" table
users = [
('John Doe', 'johndoe@example.com'),
('Jane Smith', 'janesmith@example.com'),
('Bob Johnson', 'bobjohnson@example.com')
]
cursor.executemany('INSERT INTO users (name, email) VALUES (?,?)', users)
## Commit the changes to the database
conn.commit()
## Close the cursor and the database connection
cursor.close()
conn.close()
cd ~/project
python create_database.py
このコードを実行した後、サンプルデータが含まれる "users" テーブルを持つ example.db という名前の SQLite データベースファイルができます。このデータベースは、Flask アプリケーションでデータを取得して操作するために使用されます。
Flask で REST API を構築する
さて、先ほど作成した SQLite データベース example.db を使用して、Flask で REST API を構築しましょう。
app.py ファイルに、必要なモジュールをインポートするための次のコードを追加します。
from flask import Flask, jsonify, request
import sqlite3
Flask アプリケーションを作成するための次のコードを追加します。
## Create the Flask application
app = Flask(__name__)
さて、REST API のエンドポイントを定義しましょう。
すべてのユーザーを取得するエンドポイント
## Endpoint to retrieve all users
@app.route('/users', methods=['GET'])
def get_users():
## Connect to the database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
## Execute the SQL query to retrieve all users
cursor.execute('SELECT * FROM users')
users = cursor.fetchall()
## Close the cursor and the database connection
cursor.close()
conn.close()
## Return the users as JSON
return jsonify(users)
このコードでは、まず connect() メソッドを使用して SQLite データベースに接続します。次に、cursor() メソッドを使用して SQL 文を実行するためのカーソルオブジェクトを作成します。そして、execute() メソッドを使用して "users" テーブルからすべてのユーザーを取得する SQL クエリを実行します。最後に、close() メソッドを使用してカーソルとデータベース接続を閉じ、jsonify() メソッドを使用してユーザーを JSON 形式で返します。
ID で特定のユーザーを取得するエンドポイント
## Endpoint to retrieve a specific user by ID
@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
## Connect to the database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
## Execute the SQL query to retrieve the user by ID
cursor.execute('SELECT * FROM users WHERE id =?', (user_id,))
user = cursor.fetchone()
## Close the cursor and the database connection
cursor.close()
conn.close()
## Check if the user exists
if user:
return jsonify(user)
else:
return jsonify({'message': 'User not found'}), 404
このエンドポイントは、すべてのユーザーではなく ID で特定のユーザーを取得する点を除けば、前のエンドポイントと似ています。"users" テーブルから単一のユーザーを取得するために fetchone() メソッドを使用します。
新しいユーザーを作成するエンドポイント
## Endpoint to create a new user
@app.route('/users', methods=['POST'])
def create_user():
## Get the user data from the request body
data = request.get_json()
name = data['name']
email = data['email']
## Connect to the database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
## Execute the SQL query to insert a new user
cursor.execute('INSERT INTO users (name, email) VALUES (?,?)', (name, email))
conn.commit()
## Close the cursor and the database connection
cursor.close()
conn.close()
## Return a success message
return jsonify({'message': 'User created successfully'})
このエンドポイントは、"users" テーブルに新しいユーザーを作成するために使用されます。get_json() メソッドを使用してリクエストボディからユーザーデータを取得します。そして、execute() メソッドを使用して新しいユーザーを "users" テーブルに挿入します。
既存のユーザーを更新するエンドポイント
## Endpoint to update an existing user
@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
## Get the updated user data from the request body
data = request.get_json()
name = data['name']
email = data['email']
## Connect to the database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
## Execute the SQL query to update the user
cursor.execute('UPDATE users SET name =?, email =? WHERE id =?', (name, email, user_id))
conn.commit()
## Close the cursor and the database connection
cursor.close()
conn.close()
## Return a success message
return jsonify({'message': 'User updated successfully'})
このエンドポイントは、"users" テーブルの既存のユーザーを更新するために使用されます。get_json() メソッドを使用してリクエストボディから更新されたユーザーデータを取得します。そして、execute() メソッドを使用して "users" テーブルのユーザーを更新します。
ユーザーを削除するエンドポイント
## Endpoint to delete a user
@app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
## Connect to the database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
## Execute the SQL query to delete the user
cursor.execute('DELETE FROM users WHERE id =?', (user_id,))
conn.commit()
## Close the cursor and the database connection
cursor.close()
conn.close()
## Return a success message
return jsonify({'message': 'User deleted successfully'})
このエンドポイントは、"users" テーブルからユーザーを削除するために使用されます。execute() メソッドを使用して "users" テーブルからユーザーを削除します。
最後に、Flask アプリケーションを実行するための次のコードを追加しましょう。
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=8080)
Flask アプリケーションを実行する
プロジェクトを実行して Flask アプリケーションを起動するには、ターミナルまたはコマンドプロンプトを開き、プロジェクトディレクトリに移動して、次のコマンドを実行します。
cd ~/project
python app.py
次のような出力が表示されるはずです。
* Serving Flask app 'app' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
これは、Flask アプリケーションがあなたのマシン上でローカルに実行されていることを意味します。これで、cURL のようなツールや Postman のような API テストツールを使用して REST API エンドポイントをテストすることができます。
REST API エンドポイントをテストする
- 新しいターミナルまたはコマンドプロンプトを開きます。
- 次の cURL コマンドを使用して各エンドポイントをテストします。
- すべてのユーザーを取得する:
curl http://localhost:8080/users
- ID で特定のユーザーを取得する(
<user_id>を実際のユーザー ID に置き換えてください):
curl http://localhost:8080/users/<user_id>
- 新しいユーザーを作成する:
curl -X POST -H "Content-Type: application/json" -d '{"name":"John Doe","email":"johndoe@example.com"}' http://localhost:8080/users
- 既存のユーザーを更新する(
<user_id>を実際のユーザー ID に置き換えてください):
curl -X PUT -H "Content-Type: application/json" -d '{"name":"Updated Name","email":"updated@example.com"}' http://localhost:8080/users/<user_id>
- ユーザーを削除する(
<user_id>を実際のユーザー ID に置き換えてください):
curl -X DELETE http://localhost:8080/users/<user_id>
対応するエンドポイントをテストする際には、<user_id> をデータベース内の実際のユーザー ID に置き換えることを確認してください。
これらの cURL コマンドを実行することで、REST API エンドポイントの機能をテストし、正しく動作しているかを確認できます。
あるいは、Web 8080 タブに切り替えて、ブラウザを使用して REST API エンドポイントをテストすることもできます。

これらのテスト手順により、Flask アプリケーションとその REST API エンドポイントが期待通りに機能していることを確認できます。
まとめ
このプロジェクトでは、SQLite をデータベースとして使用して Flask で REST API を構築する方法を学びました。サンプルの SQLite データベースを作成し、データを入力しました。そして、データベースからユーザーを取得、作成、更新、削除するためのエンドポイントを持つ Flask アプリケーションを構築しました。この手順を順に進めることで、SQLite データベースとやり取りするための REST API を提供する機能的な Flask アプリケーションが完成したはずです。



