Skip to content
Back to skills

Database Migration

ASecurity

Safely run database schema migrations. Use when asked to update database schema, add columns, create tables, run alembic, or apply Django migrations.

  • 498 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added June 5, 2026
databasespythongosqldjangodatabase

Security analysis

A100/100

Scanned June 5, 2026

npx -y skills add agulli/atlas-agents --skill database-migration --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Database Migration?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Database Migration
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/agulli-database-migration/badge)](https://www.skillsdirectory.com/skills/agulli-database-migration)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: database-migration
description: Safely run database schema migrations. Use when asked to update database schema, add columns, create tables, run alembic, or apply Django migrations.
license: MIT
compatibility: Requires python 3.10+ and one of alembic, django, or prisma
---

## Clarification Gates

Before executing any migration, you must have clear answers to all of the following. If any is missing or ambiguous, STOP and ask. Do not infer from filenames, branch names, or previous conversation context.

- **Environment:** local / staging / production?
- **Backup confirmed:** Has a database backup been taken in the last 24 hours?
- **Migration scope:** Is this a new column/table, or does it modify/drop existing data?

An agent that guesses the environment and gets it wrong has just migrated the wrong database. Ask first.

## Process

1. **Identify the migration tool.** Check the project for:
   - `alembic.ini` → Alembic (SQLAlchemy)
   - `manage.py` → Django migrations
   - `prisma/schema.prisma` → Prisma
   If none are found, ask the user which tool to use. Do not guess.

2. **Generate the migration.**
   - Alembic: `alembic revision --autogenerate -m "description"`
   - Django: `python manage.py makemigrations`
   - Prisma: `npx prisma migrate dev --name description`

3. **Review the generated migration file.** Read the entire file. Check for:
   - Columns being dropped (STOP and ask the user)
   - Table renames (STOP and ask the user)
   - Non-nullable columns added without defaults (this will fail on non-empty tables)

4. **Dry run.** If the tool supports it:
   - Alembic: `alembic upgrade head --sql` (generates SQL without executing)
   - Django: `python manage.py sqlmigrate <app> <migration_number>`

5. **Apply the migration** only after reviewing the dry run output.

6. **Verify.** Query the database schema directly to confirm the change took effect:
   ```sql
   -- PostgreSQL
   SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'target_table';
   -- SQLite
   PRAGMA table_info(target_table);
   ```

## Rationalizations

| Excuse | Rebuttal |
|--------|----------|
| "It's just an ADD COLUMN, I'll skip the review" | Schema locks can occur even on simple additions. Always review. |
| "The autogenerated migration looks correct" | Autogenerate guesses. It sometimes generates DROP + CREATE instead of ALTER. Read the file. |
| "I'll just run it — we can roll back" | Not all migrations are reversible. Dropping a column destroys data permanently. |

## Verification

- [ ] Migration file was read in full before applying
- [ ] No columns were dropped without explicit user approval
- [ ] Database schema was queried after migration to confirm the change
- [ ] "The command succeeded" is NOT accepted as sufficient evidence

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…