FastAPIとPostgreSQLの結合:モデル定義とマイグレーション入門
1. はじめに
1.1 自己紹介と注意事項
初めまして。私はプログラミング初心者で、これが初めての記事となります。学びながら記述しているため、全ての情報が正確で最新であるとは保証できませんので、公式ドキュメントも併せて参照し、随時確認して開発を進めてください。また、不明点や疑問点が生じた際には、積極的に調べ、学び深めていただければと思います。
1.2 記事の目的と対象読者
この記事は、FastAPIとPostgreSQLを連携させることに焦点を当てた入門ガイドです。PipenvとDockerを使用して環境を構築し、Alembicでデータベースマイグレーションを行います。初心者の開発者を対象にしています。
1.3 FastAPIとPostgreSQLの簡単な紹介
-
FastAPI
FastAPIは、高性能なWebフレームワークであり、Pythonの型ヒントを利用しています。 -
PostgreSQL
PostgreSQLは、拡張性と信頼性に優れたオープンソースのリレーショナルデータベース管理システムです。
1.4 連携の重要性と本記事の焦点
FastAPIとPostgreSQLを組み合わせることで、効果的かつ拡張性のあるバックエンドシステムの構築が可能になります。この記事では、データモデルの作り方、データベースの更新方法(マイグレーション)、そしてこれらの要素がどのように連携するのかについて、分かりやすくご紹介します。
2. 開発環境のセットアップ
2.1 必要なツール・ソフトウェアのリストアップ
- Python(バージョン3.7以上)
- FastAPI
- PostgreSQL(Dockerコンテナ)
- Uvicorn(ASGIサーバ)
- SQLAlchemy(ORM)
- Pipenv
- Docker
- Alembic(マイグレーションツール)
- DBeaver(データベース管理ツール)
2.2 事前インストール手順
PythonとPipenvのインストール
公式サイトからPythonをダウンロードし、インストーラを使用してインストールします。次に、Pipenvをインストールします。
pip install pipenv
Dockerのインストール
Docker Desktopを公式サイトからダウンロードし、インストーラを使用してDockerをインストールします。
3. プロジェクト構成のセットアップ
このセクションでは、基本的なプロジェクト構成のセットアップを行い、FastAPIが正しく起動できることを確認します。
3.1 プロジェクトフォルダの作成
まず、プロジェクトを格納するためのメインフォルダを作成します。ここでは、そのメインフォルダの名前をmy_project
とします。次に、my_project
の中にbackend
という名前のフォルダを作成します。最後に、backend
フォルダの中にapp
という名前のフォルダを作成します。
以下は、コマンドラインでのフォルダ作成のコマンドです。
mkdir my_project
cd my_project
mkdir backend
cd backend
mkdir app
3.2 仮想環境のセットアップとパッケージのインストール
backend
フォルダ直下で、pipenv
を使用して仮想環境をセットアップします。
pipenv --python 3.11
このコマンドを実行すると、backend
直下にPipfile
が生成されます。このPipfile
を開くと、以下のような内容が記載されていることを確認できます。
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
[dev-packages]
[requires]
python_version = "3.11"
python_full_version = "3.11.3"
次に、必要なパッケージをインストールします。
pipenv install fastapi uvicorn
このコマンドを実行すると、packages
セクションにインストールしたパッケージが追加されます。
ワンポイント:`pipenv install -d`の利用
pipenv install
に-d
オプションを付けると、開発時にのみ必要なパッケージをdev-packages
セクションにインストールできます。例えば、テストツールやリントツールなど、本番環境では不要なパッケージをインストールする際に便利です。
pipenv install -d pytest flake8
3.3 FastAPIアプリケーションの作成
app
フォルダの中に、main.py
と__init__.py
いう名前のPythonファイルを作成します。main.py
ファイルに、最も基本的なFastAPIアプリケーションのコードを記述します。
__init__.py
は、空のファイルで、Pythonにこのディレクトリをパッケージとして認識させるために必要です。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
3.4 FastAPIアプリケーションの起動
コマンドラインを開き、app
フォルダがあるbackend
フォルダまで移動します。次に、Pipfile
にスクリプトを追加して、pipenvの仮想環境内でFastAPIアプリケーションを簡単に起動できるようにします。Pipfile
に以下の[scripts]
セクションを追加してください。
[scripts]
start = "uvicorn app.main:app --reload"
追加したら、以下のコマンドでFastAPIアプリケーションを起動できます。
pipenv run start
ワンポイント:`uvicorn`コマンドの解説
-
uvicorn
は、ASGIサーバーです。FastAPIアプリケーションをホストするために使用します。 -
app.main:app
は、app
モジュール(main.py
ファイル)内のapp
インスタンスを指します。これにより、Uvicornはどのアプリケーションオブジェクトを実行するか知ることができます。 -
--reload
オプションは、開発中にコードの変更を自動的に反映させるためのオプションです。このオプションがあると、コードを変更するたびにサーバーを再起動する必要がなくなります。
以上の設定を行った後、ブラウザでhttp://127.0.0.1:8000
にアクセスして、"Hello, World!"が表示されれば、FastAPIが正しく起動していることが確認できます。
4. Dockerを使用してPostgreSQLコンテナのセットアップ
このセクションでは、Docker
とdocker-compose
を使用して、PostgreSQL
データベースのコンテナをセットアップします。backend
フォルダ直下にdocker-compose.yml
ファイルを作成し、以下の内容を記述します。
version: '3.9'
services:
db:
image: postgres:15
volumes:
- ./app/db/postgresql/data:/var/lib/postgresql/data
- ./app/db/postgres:/docker-entrypoint-initdb.d
ports:
- "5432:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_INITDB_ARGS=--encoding=UTF-8 --locale=C
docker-compose.yml
の解説
4.1 version
このフィールドでは、使用するdocker-compose
のバージョンを定義します。ここでは3.9
を使用しています。
services
このフィールドでは、定義する各サービス(コンテナ)をリストアップします。今回はdb
サービス(コンテナ)をセットアップします。このdb
は、docker-compose内でのこのサービスの識別名として機能します。
この名前の変更により、コンテナを操作する際のコマンドも少し変わります。例えば、このコンテナのログを確認するには、以下のコマンドを使用します。
docker-compose logs db
image
このフィールドで、db
コンテナで使用するDockerイメージを指定します。postgres:15
は、PostgreSQLのバージョン15のイメージを使用することを意味します。
volumes
このフィールドで、コンテナ内のディレクトリをホストのディレクトリと紐付け(マウント)します。これにより、コンテナ内のデータをホストマシン上で永続化できます。
volumes:
- ./app/db/postgresql/data:/var/lib/postgresql/data
- ./app/db/postgres:/docker-entrypoint-initdb.d
上記の設定により、PostgreSQLのデータが./app/db/postgresql/data
ディレクトリに永続化されます。これにより、コンテナを削除または再作成しても、データベースのデータは保持されます。また、コンテナ内の/docker-entrypoint-initdb.d
ディレクトリは./app/db/postgres
ディレクトリにマウントされます。
ports
コンテナのポートをホストのポートにマッピングします。"5432:5432"
とすることで、コンテナの5432ポートがホストの5432ポートに結びつけられます。
environment
環境変数を定義します。ここで定義した環境変数は、コンテナ内で利用可能となります。特に、ここではPostgreSQLの設定に関わるいくつかの重要な環境変数を設定しています。
環境変数の詳細
💡 POSTGRES_USER
この環境変数は、PostgreSQLのスーパーユーザーのユーザ名を設定します。デフォルトはpostgres
です。
💡 POSTGRES_PASSWORD
この環境変数は、スーパーユーザーのパスワードを設定します。セキュリティの観点から、この環境変数の設定は強く推奨されます。設定しない場合、パスワードなしでアクセス可能になります。
💡 POSTGRES_INITDB_ARGS
この環境変数は、データベース初期化時の引数を設定します。デフォルトの設定が適用されますが、ここではエンコーディングをUTF-8にし、ロケールをCに設定しています。これにより、データベースの文字エンコーディングの問題を防ぎます。
4.2 コンテナの起動とデータの永続化の確認
backend
フォルダ直下で、以下のコマンドを実行し、コンテナを起動します。
docker-compose up
このコマンドを実行することで、定義したdocker-compose.yml
に基づいてPostgreSQL
コンテナが起動します。コンテナが正しく起動したことを確認したら、volumes
で設定した箇所にフォルダが作成されているかを確認しましょう。
ls ./app/db/postgresql/data
ls ./app/db/postgres
これらのコマンドを実行することで、指定したディレクトリが正しく作成されているか確認できます。初回の起動時にのみ、これらのディレクトリは作成されますので、この時点でしっかりと確認しておくことが重要です。
このディレクトリの確認により、データの永続化が正しく行われていることがわかります。これによって、コンテナを再起動したり、削除したりしても、データベースのデータは保持され続けます。
5. モデルの設定とORMの利用
このセクションでは、データベースにテーブルを作成するためのモデルをセットアップします。モデルは、データベースのテーブルの構造をPythonのクラスで表現したものです。また、このモデルを通じて、ORM(Object-Relational Mapping)の概念を利用します。ORMは、プログラミング言語のオブジェクトとデーキースのテーブルをマッピングするテクニックです。これにより、データベース操作をプログラムのオブジェクトとして扱えるため、データベースとのやり取りが直感的かつ容易になります。
5.1 Baseクラスの作成
まず、app/db
ディレクトリ内に既に存在しているため、その中に__init__.py
とbase_class.py
という名前のファイルを作成します。__init__.py
は空のファイルで、Pythonにこのディレクトリをパッケージとして認識させるために必要です。
次に、base_class.py
に以下のコードを記述します。
from typing import Any
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.orm import as_declarative
@as_declarative()
class Base:
id: Any
__name__: str
# Generate __tablename__ automatically
@declared_attr
def __tablename__(cls) -> str:
return cls.__name__.lower()
このBase
クラスは、他のモデルクラスが継承する基底クラスとなります。このクラスを継承することで、作成するモデルクラスはSQLAlchemyの機能にアクセスでき、データベースとのインタラクションが可能になります。__tablename__
メソッドを利用して、継承したクラスのインスタンスがデータベースにマッピングされる際のテーブル名を自動生成します。
5.2 Userモデルの作成
次に、app
ディレクトリ内にmodels
ディレクトリを新規作成します。そして、その中に__init__.py
とuser.py
という名前のファイルを新規作成します。__init__.py
は、ここでも空のファイルで、Pythonにこのディレクトリをパッケージとして認識させるために必要です。
次に、user.py
に以下のコードを記述します。
from datetime import datetime
from app.db.base_class import Base
from sqlalchemy import Column, DateTime, String
class User(Base):
__tablename__ = "users"
id = Column(String, primary_key=True)
name = Column(String(20), nullable=False, default="default_name")
created_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
ここで定義したUser
クラスは、Base
クラスを継承しており、データベースのusers
テーブルに対応するモデルとなります。このモデルクラスを通じて、データベースにデータを保存したり、データベースからデータを取得したりできます。
コードの詳細説明:
-
__tablename__ = "users"
: このクラスがデータベース内でどのテーブルに対応するかを指定しています。ここではusers
テーブルと定義しています。 -
id = Column(String, primary_key=True)
:users
テーブルにはid
という名前のカラムが存在し、これがテーブルの主キーとなります。主キーは、テーブル内の各行を一意に識別するためのキーです。 -
name = Column(String(20), nullable=False, default="default_name")
: この行は、name
という名前のカラムを定義しています。nullable=False
はこのカラムが空の値を許さないことを意味し、default="default_name"
は、何も値が設定されなかった場合にはdefault_name
がデフォルト値として設定されることを意味します。 -
created_at
およびupdated_at
カラム: これらは、ユーザーが作成された日時や更新された日時を保持します。default=datetime.utcnow
は、デフォルトで現在のUTC時刻が設定され、onupdate=datetime.utcnow
は、行が更新されるたびに現在のUTC時刻で更新されます。
このセクションでは一つのテーブルのみを作成しましたが、実際には複数のテーブルを作成し、それらの間でのリレーションシップも設定できます。これにより、複雑なデータ構造とデータ間の関係を表現し、データベースからのデータ取得や操作がより効率的に行えます。
6. FastAPIとデータベースの接続設定
このセクションでは、FastAPIアプリケーションとPostgreSQLデータベースを接続する設定を行います。これにより、アプリケーションからデータベースにアクセスし、データの読み書きができるようになります。
6.1 必要なパッケージのインストール
まず、以下のコマンドを実行して、必要なパッケージをインストールしてください。
pipenv install pydantic-settings psycopg2-binary
-
pydantic-settings
は、BaseSettings
を使うために必要なパッケージです。 -
psycopg2-binary
は、PythonからPostgreSQLに接続するためのパッケージです。
6.2 設定ファイルの作成
次に、app
ディレクトリの中にcore
ディレクトリを新しく作成し、その中に__init__.py
とconfig.py
という名前のファイルを作成します。__init__.py
は空のファイルで構いません。これにより、Pythonはこのディレクトリをパッケージとして認識します。
6.3 config.pyの記述
config.py
ではpydantic-settings
のBaseSettings
クラスを利用します。このBaseSettings
クラスを利用すると、環境変数や.env
ファイルから設定値を簡単に読み込むことができます。
config.py
に以下のコードを記述します。
import enum
from typing import Any, Optional
from pydantic import PostgresDsn, ValidationInfo, field_validator
from pydantic_settings import BaseSettings
class AppEnvironment(str, enum.Enum):
DEVELOP = "development"
PRODUCTION = "production"
class Settings(BaseSettings):
ENVIRONMENT: AppEnvironment
API_V1_STR: str = "/api/v1"
PROJECT_NAME: str = "My_Project_Name"
POSTGRES_SERVER: str
POSTGRES_USER: str
POSTGRES_PASSWORD: str
POSTGRES_DB: str
POSTGRES_PORT: str
SQLALCHEMY_DATABASE_URI: Optional[str] = None
@field_validator("SQLALCHEMY_DATABASE_URI", mode="after")
def assemble_db_connection(cls, v: Optional[str], values: ValidationInfo) -> Any:
if isinstance(v, str):
return v
return str(
PostgresDsn.build(
scheme="postgresql",
username=values.data.get("POSTGRES_USER"),
password=values.data.get("POSTGRES_PASSWORD"),
host=values.data.get("POSTGRES_SERVER"),
port=int(values.data.get("POSTGRES_PORT")),
path=f"{values.data.get('POSTGRES_DB') or ''}",
)
)
settings = Settings()
6.4 .envファイルの作成
次に、プロジェクトのbackend
ディレクトリ直下に.env
という名前のファイルを作成します。そして、以下の内容を.env
ファイルに記述します。
ENVIRONMENT='development'
POSTGRES_USER='postgres'
POSTGRES_PASSWORD='postgres'
POSTGRES_DB='postgres'
POSTGRES_SERVER='localhost'
POSTGRES_PORT='5432'
6.5 データベースへの接続
次に、SQLAlchemyを使用してデータベースへ接続を試みます。app
ディレクトリ内にsession.py
という名前のファイルを作成し、以下の内容を記述します。
from app.core.config import settings
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
if settings.SQLALCHEMY_DATABASE_URI:
engine = create_engine(
settings.SQLALCHEMY_DATABASE_URI,
pool_pre_ping=True,
)
SessionLocal = scoped_session(
sessionmaker(autocommit=False, autoflush=False, bind=engine)
)
if settings.ENVIRONMENT == "development":
db_info = f"Using database at {settings.SQLALCHEMY_DATABASE_URI}"
print(db_info)
else:
raise ValueError("SQLALCHEMY_DATABASE_URI is not set")
このファイルでは、設定ファイルからデータベースのURLを取得し、SQLAlchemyのcreate_engine
関数を使用してデータベースへの接続エンジンを作成しています。また、sessionmaker
を使用して、デーキースセッションのファクトリSessionLocal
を作成しています。
6.6 接続のテスト
最後に、作成した接続設定が正しく動作するかテストします。app
ディレクトリ内にtest_connection.py
という名前のファイルを作成し、以下の内容を記述します。
from sqlalchemy import text
from app.db.session import engine
with engine.connect() as connection:
result = connection.execute(text("SELECT 'Hello, World!'"))
print(result.scalar())
このスクリプトを実行すると、データベースに接続し、簡単なSQL文を実行して結果を出力します。これにより、設定が正しく、データベースに接続できることを確認できます。
pipenv run python -m app.test_connection
このコマンドを実行し、"Hello, World!"が出力されれば、データベースへの接続設定が正しく完了しています。
7. データベースマイグレーションの設定
データベースマイグレーションとは、データベースのスキーマを変更するプロセスです。例えば、新しいテーブルの追加や既存のテーブルの変更などが含まれます。このセクションでは、Alembicというツールを使用して、データベースマイグレーションを管理します。
Alembicとは?
Alembicは、SQLAlchemyで使用するための軽量データベースマイグレーションツールです。Alembicを用いると、データベーススキーマの変更履歴を一元的に管理できます。このツールの利点としては以下のような点が挙げられます。
- バージョン管理: データベースの変更履歴をコードベースに保持でき、バージョン管理システムを通じてスキーマの変更を追跡できます。
- 環境の一致: 開発、テスト、本番環境間でデータベースのスキーマを一致させることができ、環境間での不整合によるバグを防ぐことができます。
- ロールバック機能: 過去のマイグレーションにロールバックすることができ、新しいスキーマが問題を引き起こした場合に、迅速に対処できます。
これらのメリットにより、Alembicはデータベースマイグレーションの管理において非常に効果的なツールです。
7.1 Alembicのインストール
まず、Alembicをインストールします。
pipenv install alembic
7.2 Alembicの初期設定
Alembicをインストールしたら、次のコマンドでAlembicの初期設定を行います。
pipenv run alembic init migration
このコマンドを実行すると、プロジェクトディレクトリにalembic.ini
ファイルとmigration
ディレクトリが生成されます。
7.3 alembic.iniとenv.pyの設定
alembic.ini
ファイルとmigration/env.py
ファイルに、プロジェクトのデータベース設定を反映させます。
-
alembic.iniの設定
alembic.ini
においては、sqlalchemy.url
の値を%(DB_URL)s
に設定します。sqlalchemy.url = %(DB_URL)s
-
env.pyの設定
migration/env.py
ファイルを開き、以下の変更を加えます。- 必要なモジュールをインポートし、
config
オブジェクトを取得。 - モデルのメタデータをインポートし、
target_metadata
に割り当て。 -
config.set_section_option
でDB_URL
を動的に設定。
env.pyfrom logging.config import fileConfig from sqlalchemy import engine_from_config from sqlalchemy import pool from app.core.config import settings from app.db.base_class import Base from alembic import context config = context.config if config.config_file_name is not None: fileConfig(config.config_file_name) from app.models.user import User # noqa from app.models.closet import Closet # noqa from app.models.clothes import Clothes # noqa target_metadata = Base.metadata config.set_section_option("alembic", "DB_URL", settings.SQLALCHEMY_DATABASE_URI)
これで、Alembicを使用してデータベースマイグレーションを管理するための基本的な設定は完了です。この設定により、異なる環境間でデータベースのスキーマの一致性を保ち、スキーマの変更履歴を追跡できるようになります。
env.pyの完全なコード
env.pyfrom logging.config import fileConfig from sqlalchemy import engine_from_config from sqlalchemy import pool from app.core.config import settings from app.db.base_class import Base from alembic import context # this is the Alembic Config object, which provides # access to the values within the .ini file in use. config = context.config # Interpret the config file for Python logging. # This line sets up loggers basically. if config.config_file_name is not None: fileConfig(config.config_file_name) # add your model's MetaData object here # for 'autogenerate' support # from myapp import mymodel # target_metadata = mymodel.Base.metadata from app.models.user import User # noqa target_metadata = Base.metadata # other values from the config, defined by the needs of env.py, # can be acquired: # my_important_option = config.get_main_option("my_important_option") # ... etc. config.set_section_option("alembic", "DB_URL", settings.SQLALCHEMY_DATABASE_URI) def run_migrations_offline() -> None: """Run migrations in 'offline' mode. This configures the context with just a URL and not an Engine, though an Engine is acceptable here as well. By skipping the Engine creation we don't even need a DBAPI to be available. Calls to context.execute() here emit the given string to the script output. """ url = config.get_main_option("sqlalchemy.url") context.configure( url=url, target_metadata=target_metadata, literal_binds=True, dialect_opts={"paramstyle": "named"}, ) with context.begin_transaction(): context.run_migrations() def run_migrations_online() -> None: """Run migrations in 'online' mode. In this scenario we need to create an Engine and associate a connection with the context. """ connectable = engine_from_config( config.get_section(config.config_ini_section, {}), prefix="sqlalchemy.", poolclass=pool.NullPool, ) with connectable.connect() as connection: context.configure( connection=connection, target_metadata=target_metadata ) with context.begin_transaction(): context.run_migrations() if context.is_offline_mode(): run_migrations_offline() else: run_migrations_online()
- 必要なモジュールをインポートし、
7.4 マイグレーションファイルの作成とマイグレーションの実行
マイグレーションファイルの作成
マイグレーションファイルは、データベースの変更を記述したPythonファイルです。以下のコマンドを実行することで、マイグレーションファイルが自動生成されます。
pipenv run alembic revision --autogenerate -m "description_of_your_change"
ここで、-m
オプションはマイグレーションファイルにメッセージを追加するためのオプションです。これによって、マイグレーションファイルにどのような変更が含まれているのか簡単に識別できます。このオプションを省略した場合、マイグレーションファイル名にはユニークなIDのみが含まれ、そのマイグレーションが何をするものなのかが一見してわかりにくくなります。
例えば、ユーザーテーブルを追加するマイグレーションを作成する場合、以下のように実行することができます。
pipenv run alembic revision --autogenerate -m "add_user_table"
これにより、migrations/versions
ディレクトリの下に新しいマイグレーションファイルが生成されます。
マイグレーションの実行
マイグレーションファイルが作成されたら、次にそのマイグレーションを実行してデータベースに変更を適用します。マイグレーションを実行するには、以下のコマンドを使用します。
pipenv run alembic upgrade head
ただし、頻繁にマイグレーションを行う場合、毎回完全なコマンドを入力するのは煩わしいでしょう。そこで、先ほどと同様にPipfileの[scripts]
セクションに以下のような記述を追加してください。
[scripts]
upgrade = "alembic upgrade head"
この設定を行った後は、マイグレーションを実行する際に以下のように短縮形のコマンドを使用できます。
pipenv run upgrade
head
は、最新のマイグレーションを指します。この短縮コマンドを実行することで、作成されたマイグレーションファイルに基づいてデータベースのスキーマが更新されます。
7.5 マイグレーションの確認(DBeaverを使用)
マイグレーションが正しく適用されたか確認するために、DBeaverというデータベース管理ツールを使用します。DBeaverは、多くのデータベースシステムをサポートする無料のデータベースツールです。DBeaverを使用することで、GUIを通じて簡単にデータベースの構造を確認し、SQLクエリを実行できます。
1. DBeaverのインストール
DBeaverは多くのプラットフォームで利用可能です。以下は、DBeaver Community Edition(無料版)のインストール手順です。
-
WindowsやMac:
- DBeaverの公式サイトからインストーラをダウンロードします。
- ダウンロードしたインストーラを実行し、指示に従ってインストールを完了させます。
2. データベースへの接続
- DBeaverを開き、「New Database Connection」をクリックします。
- 接続したいデータベースのタイプを選択し(この場合はPostgreSQL)、接続設定を行います。ここで、
.env
ファイルに設定したデータベースの情報(ユーザー名、パスワードなど)を入力します。 - 接続設定画面で、「Show all databases」のオプションにチェックを入れます。
- 「Test Connection」をクリックして接続をテストし、問題がなければ「Finish」をクリックして接続を完了させます。
3. テーブルの確認
- DBeaverのデータベースエクスプローラを使用して、マイグレーションによって変更されたはずのテーブルを探し、構造が期待通りに変更されているか確認します。
show_all_databasesについて
DBeaverの「Show all databases」オプションをチェックすると、接続しているデータベースサーバー上のすべてのデータベースが表示されます。このオプションが無効の場合、特定のデータベースのみが表示され、他のデータベースは表示されない可能性があります。このオプションを有効にすることで、データベースサーバー上のすべてのデータベースを確認でき、マネージメントやデバッグの作業が容易になります。
8. まとめ
このシリーズでは、FastAPIを使用したWebアプリケーションの基本的な構築方法について学びました。以下は、これまでに学習した主要なトピックです。
- プロジェクトのセットアップ: FastAPIプロジェクトの基本的な構造とセットアップ方法を学びました。
- Dockerの使用: アプリケーションとデータベースのコンテナ化にDockerを使用しました。
- データベースの設定: PostgreSQLデータベースの設定と、FastAPIアプリケーションとの接続方法を学びました。
- Alembicを使用したマイグレーション: データベーススキーマの変更管理のためにAlembicを設定し、マイグレーションを実行しました。
- DBeaverの設定: DBeaverを使用してデータベースを視覚的に確認しました。
次のステップ
次の記事では、更に進んだ内容に触れていきます。具体的には、以下のトピックスについて詳細に説明します。
- 複数モデルの管理: 複数のモデルが存在し、それらのモデル間にリレーションシップがある場合の管理方法について学びます。
- データベース操作の実装: FastAPIを使用してデータベースにレコードを追加、更新、削除、取得する方法について詳しく説明します。
下記のリンクから続けて学習してみましょう!!
さらなる学習
これまでに学んだ知識を基に、自身でアプリケーションを開発し、新しい機能を追加することで、FastAPIとデータベース操作の理解を深めていきましょう。次の記事でも更に多くの知識とテクニックを学ぶことで、更に洗練されたアプリケーションの開発が可能になります。
このシリーズが、FastAPIを使用したWebアプリケーション開発の第一歩となり、読者の皆様の学習の助けとなることを願っています。
プロジェクトリポジトリ
今回作成したリポジトリ:
- 本記事で構築したプロジェクトの全てのコードが含まれています。是非、クローンまたはフォークして、自由に使用や改変を行ってください。
9. 参照リンク
参考にしたリポジトリ:
- 本記事を書くにあたり、参考にしたリポジトリです。詳細な例や、更に進んだ内容を学ぶには、このリポジトリが非常に有用です。
最後に
記事を読んでいただきありがとうございました。何か質問やフィードバックがあれば、お気軽にコメントしてください。
Discussion