ChatGPTに簡単なCRUD_WebAPIアプリを作ったもらった

ChatGPTに簡単なCRUD_WebAPIアプリを作ってもらいました。

ChatGPTへの指示文:

以下の内容をCRUDアプリケーションのWebAPIを作成してください。
Pythonで記述する
フレームワークはFastAPIを使う
・データベースはSQLiteを使う
・機能はユーザー作成、ユーザー情報の取得、ユーザー情報の変更、ユーザーの削除

回答:

以下が、CRUDアプリケーションのWebAPIの例です。この例では、FastAPIとSQLiteを使用して、ユーザーの作成、取得、更新、削除を処理します。データベースには、Pythonの組み込みモジュールであるsqlite3を使用します。この例を動作させるには、FastAPIとsqlite3をインストールする必要があります。


from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import sqlite3

app = FastAPI()
db_path = "users.db"

class User(BaseModel):
    username: str
    password: str
    age: int

def create_user_table():
    with sqlite3.connect(db_path) as conn:
        conn.execute("""
            CREATE TABLE IF NOT EXISTS users (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                username TEXT NOT NULL,
                password TEXT NOT NULL,
                age INTEGER NOT NULL
            )
        """)

@app.post("/users")
def create_user(user: User):
    with sqlite3.connect(db_path) as conn:
        cursor = conn.cursor()
        cursor.execute("""
            INSERT INTO users (username, password, age) VALUES (?, ?, ?)
        """, (user.username, user.password, user.age))
        user_id = cursor.lastrowid
        conn.commit()
        return {"id": user_id, **user.dict()}

@app.get("/users/{user_id}")
def get_user(user_id: int):
    with sqlite3.connect(db_path) as conn:
        cursor = conn.cursor()
        cursor.execute("""
            SELECT * FROM users WHERE id = ?
        """, (user_id,))
        user = cursor.fetchone()
        if not user:
            raise HTTPException(status_code=404, detail="User not found")
        user_dict = {"id": user[0], "username": user[1], "password": user[2], "age": user[3]}
        return user_dict

@app.put("/users/{user_id}")
def update_user(user_id: int, user: User):
    with sqlite3.connect(db_path) as conn:
        cursor = conn.cursor()
        cursor.execute("""
            UPDATE users SET username = ?, password = ?, age = ? WHERE id = ?
        """, (user.username, user.password, user.age, user_id))
        conn.commit()
        return {"id": user_id, **user.dict()}

@app.delete("/users/{user_id}")
def delete_user(user_id: int):
    with sqlite3.connect(db_path) as conn:
        cursor = conn.cursor()
        cursor.execute("""
            DELETE FROM users WHERE id = ?
        """, (user_id,))
        conn.commit()
        return {"message": "User deleted successfully"}

create_user_table()

この例の動作を確認するには、上記のコードをPythonファイルに保存して、次のコマンドを実行してください。


uvicorn main:app --reload

これで、CRUDアプリケーションのWebAPIが起動し、次のエンドポイントが利用可能になります。


POST /users
GET /users/{user_id}
PUT /users/{user_id}
DELETE /users/{user_id}
結果:

無事にWebAPIが立ち上がって成功しました。テスト用に以下のpyも書いてpostしました。面倒な場合はブラウザ直のpostmanとかでも可


import requests

user_data = {
    "username": "JohnDoe",
    "password": "password123",
    "age": 25
}

response = requests.post("http://localhost:8000/users", json=user_data)