What problem does it solve? Code that works on SQLite often breaks on PostgreSQL or MySQL because row locking, upsert syntax, JSON handling, autoincrement, and transaction isolation defaults differ per engine. This Skill guides an agent to write one typed SQLAlchemy 2.x data layer that runs correctly on all three dialects. ## Core Features & Use Cases - Typed 2.x ORM models: Define models with DeclarativeBase, Mapped[...], and mapped_column, with nullability derived from type annotations. - Engine, pooling, and sessions: Create one engine per process with correct pool configuration, and use short-lived session-scoped transactions, sync-first with an async (AsyncSession) aside. - Cross-dialect gotcha matrix: Branch correctly for row locking (with_for_update / SKIP LOCKED), JSON vs JSONB, upsert (ON CONFLICT vs ON DUPLICATE KEY UPDATE), autoincrement, and isolation levels. - Use Case: You are building a service that must run locally on SQLite for tests but deploy to PostgreSQL or MySQL. Use this Skill to set up the engine, models, and per-dialect upsert and locking branches so nothing silently breaks when you switch engines. ## Quick Start Use the sqlalchemy skill to set up a typed SQLAlchemy 2.x data layer with models and sessions that runs on SQLite, PostgreSQL, and MySQL.