本記事はPython初学者やFastAPIを学習したいと考えているWebエンジニア向けの入門者向けの記事になります。
この記事はFastAPIとPostgreSQLを接続する方法です。
Pythonのインストールから実施しますので安心して記事を進めてみてください。
Pythonの高速APIのFastAPIを利用するシーンが多くなってきました。
案件でも使用する機会が増えてきたのでノウハウと公開したいと思います。
すこし前ですとPythonでWebアプリを作成するのはDjango一択でした。
ですが最近ではJavaScriptのフレームワーク(特にReact)+FastAPIで開発することが増えています。
JavaScriptフレームワーク+APIの構成で優れていると感じることはネイティブアプリでもコードや環境を流用することができる点です。
性能的に遅いと言われるPythonで文字通り高速なFastAPIを学習していただければと幸いです。
- FastAPIとは?高速APIのメリット・デメリットを紹介!
- LinuxサーバーにFastAPIのインストールをする方法
- FastAPIでHello World。Pythonの爆速Webフレームワークを試してみよう!
- FastAPIでPostgreSQLに接続する方法(今回の記事はここ)
- FastAPI+PostgreSQLでモデル定義+Migration
- FastAPI+PostgreSQLでデータ参照。SELECT文を実行する方法
- FastAPI+PostgreSQLでデータ挿入。INSERT文を実行する方法
- FastAPI+PostgreSQLでデータ更新。UPDATE文を実行する方法
- FastAPI+PostgreSQLでデータ削除。DELETE文を実行する方法
- FastAPIのAPIドキュメント自動生成
- FastAPIでJWTトークン認証を実装してみよう!
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