【FastAPI】データベースとモデルの作成【SQLAlchemy】

FastAPIでは、djangoのように特定のORMがあるわけではなく、SQLAlchemyなどのORMライブラリを用いてデータベースへの接続を行います。

今回はSQLAlchemyを使用してデータベースとモデルの作成を行います。

この記事のサンプルコード

目次

SQLAlchemyのインストール

まずはSQLAlchemyをインストールします。

pip install sqlalchemy

fastapiuvicornをインストールしていない場合には、同様にインストールしてください。

データベースの初期設定

まずはdb接続用のディレクトリを作成し、database.pyに下記コードを記述します。

まずは気軽に作成できるsqliteでデータベースを作成します。

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
 
SQLALCHEMY_DATABASE_URL = "sqlite:///./fastapi.db"
 
engine = create_engine(
    SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
 
Base = declarative_base()

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

ここでは、データベース接続に必要な情報や、セッションなどについて記述しています。

その他リレーショナルデータベースに接続する場合には

SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"

適宜変更してください。

モデルの作成

データベースのテーブルを作成するために、models.pyファイルを作成します。

ここでは、ユーザーを作成します。Baseを継承し、クラスを作成します。

from db.database import Base
from sqlalchemy import Column
from sqlalchemy.sql.sqltypes import Boolean, Integer, String

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True, index=True)
    username = Column(String)
    email = Column(String)
    password = Column(String)
    is_active = Column(Boolean, default=True)

カラムはsqlalchemyからColumnをインポートし、それぞれの型はsqlalchemy.sql.sqltypesから

  • String
  • Integer
  • Boolean

をインポートします。

その他では、リレーションのrelationshipなどがあります。

owner = relationship("User", back_populates="items")
主な引数
  • primary_key プライマリーキー
  • index インデックス
  • default デフォルト

データベースの作成

クラスの作成が完了したら、データベースの作成について記述します。

from db import models
from db.database import engine

~~~

models.Base.metadata.create_all(engine)

main.pymodels.pyに記述します。作成が完了したら

uvicorn main:app --reload

でサーバーを起動し、起動出来たらデータベースが作成されます。

作成されたデータベースの確認

作成されたデータベース内に、テーブルがあるか確認してみます。

  • ターミナルからsqliteを実行して確認する方法
  • データベースマネジメントツールを使用して接続する方法

等がありますが、今回は直接ターミナルから確認してみます。

ターミナルからsqliteを実行

ターミナルからsqliteに接続します。

sqlite3 database_name.db

SQLite version 3.33.0 2020-08-14 13:23:32
Enter ".help" for usage hints.
sqlite>

接続出来たら.tablesで確認してみます。

sqlite> .tables

usersが返ってきたらOKです。カラム定義も確認してみましょう。

pragma table_info(your_table_name)で取得できます。

sqlite> pragma table_info(users);
0|id|INTEGER|1||1
1|username|VARCHAR|0||0
2|email|VARCHAR|0||0
3|password|VARCHAR|0||0

無事作成できてますね!

データベースマネジメントツールを使用

おすすめは、TablePlusです。

様々なデータソースに接続できるので色々な用途で活用できます。

この記事のサンプルコード

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

コメント

コメントする

目次
閉じる