Installs into .claude/skills of the current project.
Sponsors
SSkills DirectorySkills Directory
Know which skills are safe — weekly.
SSkills DirectorySkills Directory
Is that skill safe to install?
Are you the author of 979 Skill 30bd9af8?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/tools-only-979-skill-30bd9af8)
---
sidebar_position: 0
title: "Build Your Database Skill"
description: "Create a relational-db-agent skill that knows SQLModel async patterns"
keywords: [sqlmodel, skill-first, async, database, skill creation]
chapter: 44
lesson: 0
duration_minutes: 25
skills:
- name: "Skill-First Learning"
proficiency_level: "B1"
category: "Applied"
bloom_level: "Create"
digcomp_area: "Problem-Solving"
measurable_at_this_level: "Student creates a functional skill that generates valid SQLModel async code"
- name: "Documentation Research"
proficiency_level: "B1"
category: "Technical"
bloom_level: "Apply"
digcomp_area: "Information Literacy"
measurable_at_this_level: "Student uses fetching-library-docs to gather official SQLModel patterns"
- name: "Skill Specification"
proficiency_level: "A2"
category: "Applied"
bloom_level: "Understand"
digcomp_area: "Problem-Solving"
measurable_at_this_level: "Student writes LEARNING-SPEC.md defining what database skill should know"
learning_objectives:
- objective: "Create a relational-db-agent skill for async database patterns"
proficiency_level: "B1"
bloom_level: "Create"
assessment_method: "Skill generates valid SQLModel class with async session code"
- objective: "Fetch official SQLModel documentation using AI tools"
proficiency_level: "B1"
bloom_level: "Apply"
assessment_method: "Successfully retrieves async session patterns from official docs"
cognitive_load:
new_concepts: 4
assessment: "4 concepts (skill-first philosophy, LEARNING-SPEC, docs fetching, skill creation) within B1 limit"
differentiation:
extension_for_advanced: "Create skill references for specific patterns like JSONB columns or self-referential relationships"
remedial_for_struggling: "Start with minimal skill that only generates basic SQLModel class, expand later"
---
# Build Your Database Skill
You're about to learn async database patterns with SQLModel. But you won't start with "what is SQLModel?"
You'll start by **building a skill that knows SQLModel**.
This is the skill-first approach: instead of accumulating knowledge that fades, you create an asset that grows. By chapter end, your `relational-db-agent` skill will generate production-quality database code—and you'll own it.
## Why Skill-First for Databases?
Database patterns are precise. Off-by-one errors in async patterns cause `MissingGreenlet` crashes. Forgotten `await` keywords block your entire agent. Wrong relationship configurations cascade into N+1 query disasters.
A skill that knows the correct patterns eliminates these errors. You consult your skill, it generates correct code, you ship faster.
## Step 1: Clone the Skills Lab
Start fresh. Every chapter begins with a clean skills-lab:
```bash
cd ~/projects
git clone https://github.com/panaversity/claude-code-skills-lab.git ch44-skills-lab
cd ch44-skills-lab
```
**Output:**
```
Cloning into 'ch44-skills-lab'...
remote: Enumerating objects: 45, done.
remote: Counting objects: 100% (45/45), done.
Receiving objects: 100% (45/45), done.
```
## Step 2: Write Your Learning Specification
Before building the skill, define what it should know. Create `LEARNING-SPEC.md`:
```markdown
# Learning Specification: Relational Database Skill
## What This Skill Should Know
### Core Patterns
- Async engine creation with `create_async_engine`
- Connection pooling for production (`pool_pre_ping`, `pool_size`)
- AsyncSession from `sqlmodel.ext.asyncio.session`
- Session lifecycle as FastAPI dependency
### Model Patterns
- SQLModel with `table=True`
- JSONB columns for PostgreSQL
- Foreign keys and relationships
- Self-referential relationships (parent/child)
### Operations
- Async CRUD (add, flush, commit, refresh)
- Eager loading with `selectinload`
- Transaction patterns (rollback on error)
### Migrations
- Alembic async template
- Model import requirements
- Autogenerate and upgrade commands
## Success Criteria
The skill generates code that:
1. Compiles without syntax errors
2. Uses correct async/await patterns
3. Includes proper imports
4. Follows SQLModel conventions
```
**Output:**
```
Created LEARNING-SPEC.md (32 lines)
```
## Step 3: Fetch Official Documentation
Use the `/fetching-library-docs` command to get accurate patterns:
```
/fetching-library-docs sqlmodel --topic "async session"
```
The skill retrieves official SQLModel patterns—imports, code examples, and usage notes.
**What you'll receive:**
- `create_async_engine` syntax
- `AsyncSession` import path
- Session lifecycle patterns
- Code examples from official docs
Save the key patterns for your skill. Don't memorize—capture.
## Step 4: Create Your Skill
Use `/skill-creator` to build the `relational-db-agent` skill:
```
/skill-creator relational-db-agent
The skill should:
- Generate async SQLModel code for FastAPI backends
- Know proper async engine and session patterns
- Include PostgreSQL-specific features like JSONB
- Prevent common async pitfalls (MissingGreenlet, N+1 queries)
- Reference SQLModel and SQLAlchemy 2.0 async patterns
Use the patterns from LEARNING-SPEC.md and the fetched documentation.
```
The skill creator generates:
- `SKILL.md` with triggering description and instructions
- `references/` directory for detailed patterns
- `scripts/verify.py` for validation
**Output:**
```
✓ Created .claude/skills/relational-db-agent/SKILL.md
✓ Created .claude/skills/relational-db-agent/references/async-patterns.md
✓ Created .claude/skills/relational-db-agent/scripts/verify.py
```
## Step 5: Test Your Skill
Verify your skill generates valid code:
```
Using my relational-db-agent skill, create a Task model with:
- id as primary key
- title as string
- status as string with default "pending"
- created_at timestamp
```
**Expected output:**
```python
from sqlmodel import SQLModel, Field
from datetime import datetime
class Task(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
title: str
status: str = Field(default="pending")
created_at: datetime = Field(default_factory=datetime.utcnow)
```
If the output includes correct imports, `table=True`, and proper Field usage—your skill works.
## What Happens Next
| Lesson | You Learn | Your Skill Improves |
|--------|-----------|---------------------|
| L01 | Why agents need structured data | Understands relational vs vector DB |
| L02 | Async engine setup | Generates correct engine config |
| L03 | Model design | Handles JSONB and constraints |
| L04 | Session management | Knows AsyncSession lifecycle |
| L05 | CRUD operations | Generates proper async CRUD |
| L06 | Relationships | Includes selectinload patterns |
| L07 | Transactions | Handles rollback correctly |
| L08 | Migrations | Knows Alembic async setup |
| L09 | Complete layer | Generates full database layer |
Each lesson ends with a "Reflect on Your Skill" section where you test what you learned against your skill and improve it.
## Try With AI
### Prompt 1: Verify Your Skill Structure
```
Check my relational-db-agent skill at .claude/skills/relational-db-agent/
Does it have:
1. SKILL.md with proper YAML frontmatter
2. A description starting with "Use when"
3. References for async patterns
Suggest any improvements to the structure.
```
**What you're learning:** Skill validation—ensuring your skill follows the format that makes it discoverable and usable.
### Prompt 2: Test AsyncSession Generation
```
Using my relational-db-agent skill, generate a get_session()
FastAPI dependency that yields an AsyncSession from an async engine.
Include all necessary imports.
```
**What you're learning:** Session management patterns—the foundation of async database operations.
### Prompt 3: Identify Gaps
```
I'm about to learn SQLModel async patterns. Based on my
relational-db-agent skill, what database concepts should
I add to make it more complete? Consider:
- What async pitfalls is it missing?
- What PostgreSQL features should it know?
- What relationship patterns should it include?
```
**What you're learning:** Gap analysis—proactively identifying what your skill needs to become production-ready.
### Safety Note
Your skill will generate database code. Always review generated code before running it—especially CREATE, DROP, or migration operations. Test in development before production.
---
## Reflect on Your Skill
You created a `relational-db-agent` skill. Test it now.
### Test Your Skill
```
Using my relational-db-agent skill, generate a complete
async database setup for a FastAPI app with:
- PostgreSQL connection
- Engine with connection pooling
- get_session dependency
```
### Identify Gaps
Ask yourself:
- Did my skill include `pool_pre_ping=True`?
- Did it use `sqlmodel.ext.asyncio.session.AsyncSession`?
- Did it structure the dependency correctly with `yield`?
### Improve Your Skill
If you found gaps:
```
My relational-db-agent skill is missing connection pool configuration.
Update it to always include pool_pre_ping=True and configurable
pool_size for production deployments.
```
Your skill just got better. This pattern repeats every lesson.