sqlalchemy-postgres について
SQLAlchemy 2.0、Pydantic v2、Alembicを使ったPostgreSQLデータ層の構築を支援するスキルです。非同期アクセス、モデル、マイグレーション、クエリの設計指針を扱います。
主な機能
- 01SQLAlchemy 2.0の型付きORMパターン
- 02asyncpgによる非同期セッション
- 03Pydanticスキーマのマッピング
- 04Alembicのマイグレーション手順
- 05リポジトリとクエリの指針
活用シーン
- 01非同期PostgreSQLデータ層の構築
- 02ORMモデルとPydanticスキーマの定義
- 03Alembicマイグレーションの作成と管理
- 04CRUDとクエリパターンの実装
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ cfircoo/ claude-code-toolkit --skill sqlalchemy-postgresインストール後、Claude Code で/sqlalchemy-postgresを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/async-patterns.mdbest-practices.mdpatterns.mdworkflows/create-migration.mddefine-models.mdquery-patterns.mdsetup-database.md詳細
<essential_principles>
SQLAlchemy 2.0 + Pydantic + PostgreSQL のベストプラクティス
このスキルでは、本番環境に対応したデータベースレイヤーの構築に関する専門的なガイダンスを提供します。
スタック
- SQLAlchemy 2.0(非同期サポート、asyncpg ドライバー)
- Pydantic v2(検証とシリアライズ)
- Alembic(マイグレーション)
- PostgreSQL のみ
基本原則
1. 関心の分離
models/ # SQLAlchemy ORM models (database layer)
schemas/ # Pydantic schemas (API layer)
repositories/ # Data access patterns
services/ # Business logic
2. 型安全性を最優先
常に Mapped[] 型アノテーションを使い、SQLAlchemy 2.0 スタイルに従います。
from sqlalchemy.orm import Mapped, mapped_column
class User(Base):
__tablename__ = "users"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(100))
3. デフォルトで非同期 FastAPI では非同期エンジンとセッションを使用します。
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
engine = create_async_engine("postgresql+asyncpg://...")
4. Pydantic と SQLAlchemy の連携 モデルとスキーマは分離しつつ、相互にマッピングできるようにします。
# Schema reads from ORM
class UserRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
5. リポジトリパターン テスト容易性とクリーンなコードのために、データベース操作を抽象化します。 </essential_principles>
どのようなサポートが必要ですか?- データベースレイヤーのセットアップ - SQLAlchemy + Pydantic + Alembic を一から初期化する
- モデルの定義 - Pydantic スキーマを備えた SQLAlchemy モデルを作成する
- マイグレーションの作成 - Alembic のマイグレーションを生成・管理する
- クエリパターン - 非同期 CRUD、JOIN、Eager Loading、最適化
- 完全な実装 - 機能に必要なデータベースレイヤー全体を実装する
自動検出のトリガー(ユーザーが次の内容に言及した場合、このスキルを使用します):
- database, db, sqlalchemy, postgres, postgresql
- model, migration, alembic
- repository, crud, query
- async session, connection pool
<reference_index>
ドメイン知識
| リファレンス | 目的 |
|---|---|
| references/best-practices.md | 本番環境のパターン、セキュリティ、パフォーマンス |
| references/patterns.md | リポジトリ、Unit of Work、一般的なクエリ |
| references/async-patterns.md | 非同期セッション管理、FastAPI との連携 |
| </reference_index> |
<workflows_index>
| ワークフロー | 目的 |
|---|---|
| workflows/setup-database.md | データベースレイヤー全体を初期化する |
| workflows/define-models.md | モデル、スキーマ、リレーションシップを作成する |
| workflows/create-migration.md | Alembic のマイグレーションワークフロー |
| workflows/query-patterns.md | CRUD 操作と最適化 |
| </workflows_index> |
<quick_reference>
ファイル構成
src/
├── db/
│ ├── __init__.py
│ ├── base.py # DeclarativeBase
│ ├── session.py # Engine + async session factory
│ └── dependencies.py # FastAPI dependency
├── models/
│ ├── __init__.py
│ └── user.py # SQLAlchemy models
├── schemas/
│ ├── __init__.py
│ └── user.py # Pydantic schemas
├── repositories/
│ ├── __init__.py
│ ├── base.py # Generic repository
│ └── user.py # User repository
└── alembic/
├── alembic.ini
├── env.py
└── versions/
必須のインポート
# Models
from sqlalchemy import String, Integer, ForeignKey, DateTime
from sqlalchemy.orm import Mapped, mapped_column, relationship, DeclarativeBase
# Async
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
# Pydantic
from pydantic import BaseModel, ConfigDict, Field
接続文字列
# PostgreSQL async
DATABASE_URL = "postgresql+asyncpg://user:pass@localhost:5432/dbname"
</quick_reference>
<success_criteria> 次の条件を満たすと、データベースレイヤーは完成です。
- 非同期エンジンとセッションファクトリーが設定されている
- 共通フィールド(id、created_at、updated_at)を備えたベースモデルがある
- モデルで Mapped[] 型アノテーションが使用されている
- from_attributes=True を指定した Pydantic スキーマがある
- Alembic が非同期用に設定されている
- リポジトリパターンが実装されている
- セッション注入用の FastAPI 依存関係がある
- 本番環境用のコネクションプーリングが設定されている </success_criteria>
コメント
Markdown 対応