SQLAlchemy Code Review
Quick Reference
| Issue Type | Reference |
|---|---|
| Session lifecycle, context managers, async sessions | references/sessions.md |
| relationship(), lazy loading, N+1, joinedload | references/relationships.md |
| select() vs query(), ORM overhead, bulk ops | references/queries.md |
| Alembic patterns, reversible migrations, data migrations | references/migrations.md |
Review Checklist
- • Sessions use context managers (
with,async with) - • No session sharing across requests or threads
- • Sessions closed/cleaned up properly
- •
relationship()uses appropriatelazystrategy - • Explicit
joinedload/selectinloadto avoid N+1 - • No lazy loading in loops (N+1 queries)
- • Using SQLAlchemy 2.0
select()syntax, not legacyquery() - • Bulk operations use bulk_insert/bulk_update, not ORM loops
- • Async sessions use proper async context managers
- • Migrations are reversible with
downgrade() - • Data migrations use
op.execute()not ORM models - • Migration dependencies properly ordered
When to Load References
- •Reviewing session creation/cleanup → sessions.md
- •Reviewing model relationships → relationships.md
- •Reviewing database queries → queries.md
- •Reviewing Alembic migration files → migrations.md
Review Questions
- •Are all sessions properly managed with context managers?
- •Are relationships configured to avoid N+1 queries?
- •Are queries using SQLAlchemy 2.0
select()syntax? - •Are all migrations reversible and properly tested?