FastAPIとPostgreSQLの接続方法

FastAPIとPostgreSQLを接続するためには、主に以下の手順を踏みます。

必要なパッケージのインストール

まず、FastAPIとPostgreSQLを接続するために必要なパッケージをインストールします。ここでは、sqlalchemypsycopg2を使用します。

pip install fastapi sqlalchemy psycopg2

データベースエンジンの設定

次に、SQLAlchemyのデータベースエンジンを設定します。これにより、FastAPIがPostgreSQLデータベースと通信できるようになります。

from sqlalchemy import create_engine

DATABASE_URL = "postgresql://user:password@localhost:5432/mydatabase"

engine = create_engine(DATABASE_URL)

ここで、DATABASE_URLはあなたのPostgreSQLサーバーのURLを指します。user:password@localhost:5432/mydatabaseの部分は適宜書き換えてください。

データベースとの接続

最後に、FastAPIアプリケーションでデータベースとの接続を行います。

from fastapi import FastAPI
from sqlalchemy.orm import Session

app = FastAPI()

@app.on_event("startup")
async def startup():
    app.state.db = Session(bind=engine)

これで、FastAPIとPostgreSQLの接続が完了しました。次に、この接続を使用してデータベース操作を行う方法を見ていきましょう。それについては次の小見出しで詳しく説明します。

SQLAlchemyとpsycopg2の利用

FastAPIとPostgreSQLを接続する際には、SQLAlchemypsycopg2という2つの重要なパッケージを使用します。

SQLAlchemy

SQLAlchemyはPythonで最も人気のあるSQLツールキットとORM(Object Relational Mapper)の一つです。これにより、Pythonのクラスをデータベースのテーブルにマッピングし、インスタンスを行にマッピングすることができます。

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String)
    email = Column(String, unique=True, index=True)
    hashed_password = Column(String)

上記のコードは、usersテーブルを表すUserクラスを定義しています。このクラスは、idnameemailhashed_passwordという4つのカラムを持っています。

psycopg2

psycopg2は、PythonからPostgreSQLデータベースに接続するためのライブラリです。SQLAlchemyと組み合わせて使用することで、PythonからPostgreSQLデータベースを効率的に操作することができます。

from sqlalchemy import create_engine

DATABASE_URL = "postgresql://user:password@localhost:5432/mydatabase"

engine = create_engine(DATABASE_URL)

上記のコードは、psycopg2を使用してPostgreSQLデータベースに接続するためのエンジンを作成しています。このエンジンは、FastAPIアプリケーションからデータベースにクエリを発行するために使用されます。

これらのパッケージを使用することで、FastAPIとPostgreSQLの間の強力で効率的な接続を確立することができます。次の小見出しでは、これらの接続を使用して具体的なデータベース操作を行う方法について詳しく説明します。それについては次の小見出しで詳しく説明します。

データベースとの接続設定

FastAPIとPostgreSQLを接続するためには、適切なデータベース接続設定が必要です。以下にその手順を示します。

SQLAlchemyエンジンの作成

まず、SQLAlchemyのエンジンを作成します。このエンジンは、FastAPIアプリケーションとPostgreSQLデータベースとの間の通信を管理します。

from sqlalchemy import create_engine

DATABASE_URL = "postgresql://user:password@localhost:5432/mydatabase"

engine = create_engine(DATABASE_URL)

ここで、DATABASE_URLはあなたのPostgreSQLサーバーのURLを指します。user:password@localhost:5432/mydatabaseの部分は適宜書き換えてください。

FastAPIアプリケーションの設定

次に、FastAPIアプリケーションの設定を行います。FastAPIアプリケーションは、起動時と終了時にデータベースとの接続を開始および終了する必要があります。

from fastapi import FastAPI
from sqlalchemy.orm import Session

app = FastAPI()

@app.on_event("startup")
async def startup():
    app.state.db = Session(bind=engine)

@app.on_event("shutdown")
async def shutdown():
    app.state.db.close()

上記のコードでは、FastAPIアプリケーションのstartupイベントとshutdownイベントを使用して、データベースとの接続を開始および終了しています。

これで、FastAPIとPostgreSQLの接続設定が完了しました。次の小見出しでは、この接続を使用して具体的なデータベース操作を行う方法について詳しく説明します。それについては次の小見出しで詳しく説明します。

モデル定義とMigration

FastAPIとSQLAlchemyを使用して、データベースのモデルを定義し、マイグレーションを行う方法を説明します。

モデル定義

まず、SQLAlchemyを使用してデータベースのモデルを定義します。以下に、usersテーブルを表すUserモデルの例を示します。

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String)
    email = Column(String, unique=True, index=True)
    hashed_password = Column(String)

このUserモデルは、usersテーブルを表し、idnameemailhashed_passwordという4つのカラムを持っています。

マイグレーション

モデルが定義されたら、次にマイグレーションを行います。マイグレーションとは、データベースのスキーマを変更するプロセスのことを指します。Pythonのマイグレーションツールの一つにAlembicがあります。

まず、Alembicをインストールします。

pip install alembic

次に、Alembicの設定ファイルを作成します。

alembic init alembic

そして、alembic.iniファイルを編集して、データベースURLを設定します。

sqlalchemy.url = postgresql://user:password@localhost:5432/mydatabase

最後に、マイグレーションスクリプトを生成し、マイグレーションを実行します。

alembic revision --autogenerate -m "Created users table"
alembic upgrade head

これで、FastAPIとPostgreSQLの間でモデル定義とマイグレーションが完了しました。次の小見出しでは、これらの設定を使用して具体的なデータベース操作を行う方法について詳しく説明します。それについては次の小見出しで詳しく説明します。

CRUD操作とRESTAPIの作成

FastAPIとSQLAlchemyを使用して、CRUD(Create, Read, Update, Delete)操作を行い、REST APIを作成する方法を説明します。

CRUD操作

まず、SQLAlchemyを使用してCRUD操作を行います。以下に、Userモデルに対するCRUD操作の例を示します。

from sqlalchemy.orm import Session
from . import models, schemas

def get_user(db: Session, user_id: int):
    return db.query(models.User).filter(models.User.id == user_id).first()

def create_user(db: Session, user: schemas.UserCreate):
    hashed_password = get_password_hash(user.password)
    db_user = models.User(email=user.email, hashed_password=hashed_password)
    db.add(db_user)
    db.commit()
    db.refresh(db_user)
    return db_user

上記のコードでは、get_user関数とcreate_user関数を定義しています。これらの関数は、それぞれユーザーの取得と作成を行います。

REST APIの作成

次に、FastAPIを使用してREST APIを作成します。以下に、Userモデルに対するREST APIの例を示します。

from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
from . import crud, models, schemas

app = FastAPI()

@app.get("/users/{user_id}", response_model=schemas.User)
def read_user(user_id: int, db: Session = Depends(get_db)):
    db_user = crud.get_user(db, user_id=user_id)
    if db_user is None:
        raise HTTPException(status_code=404, detail="User not found")
    return db_user

@app.post("/users/", response_model=schemas.User)
def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
    return crud.create_user(db=db, user=user)

上記のコードでは、/users/{user_id}エンドポイントと/users/エンドポイントを定義しています。これらのエンドポイントは、それぞれユーザーの取得と作成を行います。

これで、FastAPIとPostgreSQLを使用してCRUD操作とREST APIの作成が完了しました。これらの設定を使用して、具体的なデータベース操作を行うことができます。それについては次の小見出しで詳しく説明します。それについては次の小見出しで詳しく説明します。

カテゴリー: 未分類

0件のコメント

コメントを残す

アバタープレースホルダー

メールアドレスが公開されることはありません。 が付いている欄は必須項目です