【Python】SQLAlchemyとAlembicを使ったNeonDBのテーブル作成とマイグレーション手順を紹介
この記事にはPRを含みます

目次
Pythonを使い、SQLAlchemyとAlembicでNeonDBにテーブル作成とマイグレーションを行った手順です
それぞれの説明
SQLAlchemy
Python向けのORM(オブジェクト関係マッパー)およびSQLツールキット
データベースとPythonコードの橋渡しをし、テーブルをPythonのクラスとして扱うことができます
Python向けとしては最も人気があるORMです
Alembic
SQLAlchemyと連携するデータベースマイグレーションツールで、スキーマの変更(テーブル追加・変更・削除など)をバージョン管理し、手軽にデータベースの更新行えます
SQLAlchemyのモデル変更を反映させるのに便利です
NeonDB
PostgreSQL互換のクラウドデータベースでサーバーレス構造を採用し、スケーラブルかつ高速な動作が特徴です
無料プランがあり個人開発するにはもってこいのデータベースです
テーブル作成とマイグレーション手順
1. ライブラリのインストール
まず、必要なライブラリをインストールします
pip install sqlalchemy alembic python-dotenv psycopg2-binary
または、requirements.txt
に以下を追記してインストールします
sqlalchemy
alembic
python-dotenv
psycopg2-binary
pip install -r requirements.txt
2. Alembic 設定ファイルの作成
Alembic の設定ファイルを生成します
alembic init alembic
3. データベース接続設定
alembic.ini
を編集し、sqlalchemy.url
を NeonDB の接続 URL に設定します
sqlalchemy.url = postgresql://[user]:[password]@[host]:[port]/[dbname]?sslmode=require
.env
ファイルに DATABASE_URL
を定義している場合は、以下のように alembic.ini
を設定します
sqlalchemy.url = %(DATABASE_URL)s
4. マイグレーションファイルの作成
マイグレーションファイルを作成します。テーブル名とカラム構成に合わせてメッセージを修正してください
今回はpricesという名前のテーブルを作成します
alembic revision -m "create prices table"
5. マイグレーションファイルの編集
作成されたマイグレーションファイル(alembic/versions/[revision]_create_prices_table.py
)を編集し、upgrade()
関数と downgrade()
関数にテーブルとカラムの定義を記述します
def upgrade() -> None:
op.create_table(
"prices",
sa.Column("code", sa.VARCHAR(20), primary_key=True),
sa.Column("price", sa.Integer),
sa.Column("date", sa.Date),
)
def downgrade() -> None:
op.drop_table("prices")
6. マイグレーションの実行
マイグレーションを実行し、データベースにテーブルを作成します
alembic upgrade head
7. テーブル作成の確認
最後に作成されたテーブルを確認するために、Python コードから接続してテーブルの存在を確認します
import os
from dotenv import load_dotenv
from sqlalchemy import create_engine, text
load_dotenv()
database_url = os.environ["DATABASE_URL"]
engine = create_engine(database_url)
with engine.connect() as conn:
result = conn.execute(text("SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_name = 'prices')"))
table_exists = result.scalar()
print(f"prices table exists: {table_exists}")
Neon Consoleの方でもテーブル作成されていることの確認ができました!

まとめ
簡単な手順でテーブル作成まですることができました
SQLAlchemyとAlembicは相性が良いですし、NeonDBの無料プランも個人開発レベルでは十分なのでこの構成は様々なプロジェクトで使いまわせそうです!