FastAPIでPostgreSQLに接続する手順

本記事はPython初学者やFastAPIを学習したいと考えているWebエンジニア向けの入門者向けの記事になります。

この記事はFastAPIとPostgreSQLを接続する方法です。

Pythonのインストールから実施しますので安心して記事を進めてみてください。

Pythonの高速APIのFastAPIを利用するシーンが多くなってきました。

案件でも使用する機会が増えてきたのでノウハウと公開したいと思います。

すこし前ですとPythonでWebアプリを作成するのはDjango一択でした。

ですが最近ではJavaScriptのフレームワーク(特にReact)+FastAPIで開発することが増えています。

JavaScriptフレームワーク+APIの構成で優れていると感じることはネイティブアプリでもコードや環境を流用することができる点です。

性能的に遅いと言われるPythonで文字通り高速なFastAPIを学習していただければと幸いです。

目次

PostgreSQLのインストールとFastAPI用のデータベース作成

まずはPostgreSQLのインストールを行います。

なお本記事のLinuxサーバーはConoha VPSのメモリー2GBのUbuntuを使用して作成します。

※インフラ環境はクラウドでも仮想環境でもOKです。

ここからはFastAPI用のデータベースとDBユーザーとしてfastapiを作成します。

su - postgres
psql

DB接続ユーザを作成します。パスワードは良くはないですが、passwordにします。

CREATE USER fastapi WITH PASSWORD 'password' LOGIN;

インストールが完了したらデータベースを作成します。

CREATE DATABASE fastapi WITH OWNER fastapi;

作成したデータベースとユーザーで接続してみましょう。

su - postgres
psql -U fastapi -h 127.0.0.1 -p 5432 fastapi

以下のようにログインできればデータベースの作成が完了しています。

$ psql -U fastapi -h 127.0.0.1 -p 5432 fastapi
Password for user fastapi:
psql (14.2 (Ubuntu 14.2-1.pgdg20.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

fastapi=>

ディレクトリ構成の確認

この章から機能ごとにフォルダ分けをします。ディレクトリが以下になる様フォルダを作成してください。

fastapi/
 ├ venv/
 │ 
 └ src/ 
   ├ database.py
   └ main.py

今回新たに以下のファイルを新規に作成します。

新規作成ファイル
  • fastapi/database.py

データベースに接続するためのファイルの作成とコーディング

.envの準備

環境変数を定義する.envファイルになります。

ソースコード内にパスワードをハードコーディングすると管理的にもセキュリティ的にも不便なのです。

以下の内容を.envに追記しましょう。

# postgresのユーザー
POSTGRES_USER=fastapi
# postgresのパスワード
POSTGRES_PASSWORD=password
# postgresのサーバー
POSTGRES_SERVER=127.0.0.1
# postgresのサーバーのポート
POSTGRES_PORT=5432
# postgresのデータベース名
POSTGRES_DB=fastapi

SQLAlchemyのインストール

FastAPIではORMとしてSQLAlchemyを使用します。

source venv/bin/activate
pip install SQLAlchemy

FastAPIからPostgreSQL接続する

PostgreSQL接続用のファイルとしてdatabase.pyを作成します。

import os
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

POSTGRES_USER = os.environ.get('POSTGRES_USER', 'fastapi')
POSTGRES_PASSWORD = os.environ.get('POSTGRES_PASSWORD', 'password')
POSTGRES_SERVER = os.environ.get('POSTGRES_SERVER', '127.0.0.1')
POSTGRES_PORT = os.environ.get('POSTGRES_PORT', '5432')
POSTGRES_DB = os.environ.get('POSTGRES_DB', 'fastapi')

SQLALCHEMY_DATABASE_URL = "postgresql://{0}:{1}@{2}:{3}/{4}".format(
    POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_SERVER, POSTGRES_PORT, POSTGRES_DB
)
engine = create_engine(
    SQLALCHEMY_DATABASE_URL
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()

これでデータベースへの接続準備完了です。

今データベースのモデルがないので、現時点でデータベースへの接続の確認は出来ません。

次の記事でモデルの定義とマイグレーションを行います。

次の記事はこちら:FastAPI+PostgreSQLでモデル定義+Migration

前の記事はこちらFastAPIでHello World。Pythonの爆速Webフレームワークを試してみよう!

よかったらシェアしてね!
  • URLをコピーしました!
目次