【FastAPI】データベースとモデルの作成【SQLAlchemy】
FastAPI
では、django
のように特定のORM
があるわけではなく、SQLAlchemy
などのORMライブラリを用いてデータベースへの接続を行います。
今回はSQLAlchemy
を使用してデータベースとモデルの作成を行います。
FastAPIの基礎についての記事まとめ
SQLAlchemyのインストール
まずはSQLAlchemy
をインストールします。
pip install sqlalchemy
fastapi
やuvicorn
をインストールしていない場合には、同様にインストールしてください。
データベースの初期設定
まずは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.py
やmodels.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です。
様々なデータソースに接続できるので色々な用途で活用できます。
FastAPIの基礎についての記事まとめ
コメント