0
0

SQLAlchemyを学ぶ

Posted at

この記事で扱うこと

FastAPIを使用したアプリケーションを開発する際に、SQLAlchemyの扱い方がわからなかったので備忘録としてまとめる。

ORMとSQLAlchemy

ORMとは・・・

オブジェクト指向プログラミングとリレーショナルデータベースの間を仲介する技術のこと。ORMを使用することで、SQLを直接記述せずにオブジェクト操作を行うことができる。

SQLAlchemyとは・・・

Pythonで広く使用されているORMライブラリ。テーブル定義、クエリの実行、リレーションシップの定義といった機能を提供する。

以下では、Userクラスがusersテーブルに対応している。

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)
    name = Column(String)
    email = Column(String)

SQLAlchmyを使用する

  1. データベースの設定を行う

    • database.pyファイルを作成し、データベース接続を設定する
    • create_engine関数を使用して、データベースのURLを指定し、エンジンを作成する
    • sessionmaker関数を使用して、セッションを作成するための設定を行う
  2. モデルの定義をする

    • models.pyファイルを作成、データベースのテーブルに対応するモデルクラスを定義する
    • declarative_base関数を使用して、ベースクラスを作成する
    • 各モデルクラスは、Baseクラスを継承して、テーブル名と列を定義する
  3. CRUD操作を実装する
    エンドポイントを作成し、SQLAlchemyを使用してデータベース操作を行う。

from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session
from database import SessionLocal, engine
from models import Base, User

app = FastAPI()

Base.metadata.create_all(bind=engine)

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

@app.post("/users")
def create_user(user: User, db: Session = Depends(get_db)):
    db.add(user)
    db.commit()
    db.refresh(user)
    return user
  • Sessionオブジェクトでデータベースセッションを管理する。
  • queryメソッドを使用することでデータ検索する
  • addメソッドを使用してデータを追加する
  • commitメソッドを使用して変更をデータベースに反映する

マイグレーション

マイグレーションとは・・・

データベースのスキーマを変更するための仕組み。テーブル構造を変更する際に、マイグレーションを使用することで、変更を管理し、追跡することができる。

PythonではAlembicというマイグレーションツールが利用される。SQLAlchemyと連携して動作することでさまざまな機能を提供する。

Alembicが提供する機能

  • マイグレーションファイルの作成
    • alembic revisionコマンドを使用して、マイグレーションフィイルを作成する
  • マイグレーションの実行
    • alembic upgradeコマンドを使用して、マイグレーションを実行し、データベーススキーマを変更する
  • マイグレーションのロールバック
    • alembic downgradeコマンドを使用して、マイグレーションを元に戻す

マイグレーションを使用することで、スキーマの変更履歴を追跡することができチーム開発を行う場合でも、データベースの変更を共有することができる。また、デプロイ時にデータベースの変更を自動で変更することが可能。

Alembicを使用したマイグレーションの設定手順

  1. Alembicのインストール

    pip install alembic
    
  2. Alembicの初期化
    標準的なディレクトリ名はalembicだが、任意に指定することができる。

    alembic init 任意のディレクトリ名
    
  3. alembic.iniファイルの編集し、データベースのURLを設定する
    下記はPostgreSQLを使用する場合の設定

    sqlalchemy.url = postgresql://username:password@hostname:port/database
    
  4. env.pyファイルのtarget_metadata変数にモデルのメタデータを設定する

  5. マイグレーションファイルの生成

    alembic revision --autogenerate -m "説明を記載"
    
  6. マイグレーションの実行し、適用する

    alembic upgrade head
    
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0