SQLite を使った Flask REST API の構築

PythonPythonBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

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

👀 プレビュー

Flask SQLite API プレビュー

🎯 タスク

このプロジェクトでは、以下のことを学びます。

  • SQLite をデータベースバックエンドとして使用した Flask アプリケーションを作成する方法
  • サンプルの SQLite データベースとテーブルを作成する方法
  • サンプルデータをデータベーステーブルに入力する方法
  • すべてのユーザーを取得し、ID で特定のユーザーを取得し、新しいユーザーを作成し、既存のユーザーを更新し、ユーザーを削除するエンドポイントを実装する方法
  • cURL またはブラウザを使用して REST API エンドポイントをテストする方法

🏆 達成目標

このプロジェクトを完了した後、以下のことができるようになります。

  • SQLite をデータベースとして使用した Flask アプリケーションを構築する
  • Flask を使用して SQLite データベース内のデータに対して CRUD 操作を実行する
  • Flask アプリケーションの REST API エンドポイントを実装してテストする

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/NetworkingGroup(["Networking"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/BasicConceptsGroup -.-> python/python_shell("Python Shell") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ModulesandPackagesGroup -.-> python/using_packages("Using Packages") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/FileHandlingGroup -.-> python/file_reading_writing("Reading and Writing Files") python/FileHandlingGroup -.-> python/file_operations("File Operations") python/PythonStandardLibraryGroup -.-> python/data_serialization("Data Serialization") python/NetworkingGroup -.-> python/http_requests("HTTP Requests") subgraph Lab Skills python/python_shell -.-> lab-445788{{"SQLite を使った Flask REST API の構築"}} python/importing_modules -.-> lab-445788{{"SQLite を使った Flask REST API の構築"}} python/using_packages -.-> lab-445788{{"SQLite を使った Flask REST API の構築"}} python/standard_libraries -.-> lab-445788{{"SQLite を使った Flask REST API の構築"}} python/file_reading_writing -.-> lab-445788{{"SQLite を使った Flask REST API の構築"}} python/file_operations -.-> lab-445788{{"SQLite を使った Flask REST API の構築"}} python/data_serialization -.-> lab-445788{{"SQLite を使った Flask REST API の構築"}} python/http_requests -.-> lab-445788{{"SQLite を使った Flask REST API の構築"}} end

プロジェクトファイルを作成する

Flask アプリケーションに必要なプロジェクトファイルを作成して始めましょう。

  1. cd コマンドを使用して ~/project ディレクトリに移動します。
  2. プロジェクトディレクトリ内に、app.py という名前の新しい Python ファイルを作成します。
  3. 同じディレクトリに 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', '[email protected]'),
    ('Jane Smith', '[email protected]'),
    ('Bob Johnson', '[email protected]')
]
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 エンドポイントをテストする

  1. 新しいターミナルまたはコマンドプロンプトを開きます。
  2. 次の 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":"[email protected]"}' http://localhost:8080/users
  • 既存のユーザーを更新する(<user_id> を実際のユーザー ID に置き換えてください):
curl -X PUT -H "Content-Type: application/json" -d '{"name":"Updated Name","email":"[email protected]"}' 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 エンドポイントをテストすることもできます。

REST API testing interface

これらのテスト手順により、Flask アプリケーションとその REST API エンドポイントが期待通りに機能していることを確認できます。

まとめ

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