python-backend — Claude Code skill: FastAPI and SQLAlchemy patterns
A skill that hands your agent working patterns for Python backends: FastAPI, async SQLAlchemy, JWT/OAuth2, Upstash caching and rate limits. Useful when the agent writes your API.
npx skills add jiatastic/open-python-skills --skill python-backend -a claude-code
npx skills add jiatastic/open-python-skills --skill fastapi-design -a claude-codeWhat python-backend does
The skill sets rules for how the agent builds a Python backend. It covers a module layout (router, schemas, models, service, dependencies), async routes, Pydantic validation, dependency injection with Depends(), async SQLAlchemy through async_sessionmaker, Redis caching and request limiting with upstash_ratelimit.
A separate chunk deals with refactoring model-generated code. The skill walks through common mistakes such as a blocking time.sleep inside an async function and shows the rewrite. Four reference files go deeper: references/fastapi_patterns.md, references/security_patterns.md, references/database_patterns.md and references/upstash_patterns.md, covering JWT, password hashing, CORS, transactions, migrations and QStash background jobs.
Upstash work needs Redis credentials. The examples build the client with Redis.from_env(), so the cache and rate-limit code reads them from environment variables. Install the skill before the agent writes its first routes — otherwise you get synchronous calls sitting inside async handlers and a manual cleanup afterwards.
What it helps with
- lay out a FastAPI project by module
- wire up async SQLAlchemy with a connection pool
- protect endpoints with JWT auth
- add Upstash caching and per-IP rate limits
- rewrite blocking calls inside async routes
Example prompts for the agent
- Set up a FastAPI project structure with separate modules for auth and posts, Pydantic schemas and a service layer
- Add JWT authentication and a get_current_user dependency for protected routes
- Hook up Upstash Redis for caching and cap requests at 10 per minute per IP
How to install python-backend
1Skills CLI (Vercel)
npx skills add jiatastic/open-python-skills --skill python-backend -a claude-codenpx skills add jiatastic/open-python-skills --skill fastapi-design -a claude-code2Manually: put the files in place
~/.claude/skills/fastapi-design/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/fastapi-design/
1Skills CLI (Vercel)
npx skills add jiatastic/open-python-skills --skill fastapi-design -a codex2Manually: put the files in place
.agents/skills/fastapi-design/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add jiatastic/open-python-skills --skill fastapi-design -a cursor2Manually: put the files in place
.cursor/skills/fastapi-design/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install jiatastic/open-python-skills fastapi-design2Manually: put the files in place
.github/skills/fastapi-design/SKILL.md1Skills CLI (Vercel)
npx skills add jiatastic/open-python-skills --skill fastapi-design -a gemini-cli2Platform CLI
gemini skills install https://github.com/jiatastic/open-python-skills --path skills/fastapi-designManually: put the files in place
.devin/skills/fastapi-design/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add jiatastic/open-python-skills --skill fastapi-design -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Similar
Nearby in Backend and APIs
Everything for Backend and APIs →Questions about python-backend
How do I install python-backend in Claude?
Run npx skills add jiatastic/open-python-skills --skill python-backend -a claude-code. The skill file lands in ~/.claude/skills/.
What does the python-backend skill do?
It gives the agent Python backend patterns: FastAPI, async SQLAlchemy, JWT/OAuth2, Upstash caching and rate limiting. It also helps refactor code a model generated.
What do I need for the Upstash parts?
Redis credentials in environment variables — the examples create the client with Redis.from_env(). Without them the caching and rate-limit code will not run.
Source text
SKILL.md · MIT
---
name: python-backend
description: >
Python backend development expertise for FastAPI, security patterns, database operations,
Upstash integrations, and code quality. Use when: (1) Building REST APIs with FastAPI,
(2) Implementing JWT/OAuth2 authentication, (3) Setting up SQLAlchemy/async databases,
(4) Integrating Redis/Upstash caching, (5) Refactoring AI-generated Python code (deslopification),
(6) Designing API patterns, or (7) Optimizing backend performance.
---
# python-backend
Production-ready Python backend patterns for FastAPI, SQLAlchemy, and Upstash.
## When to Use This Skill
- Building REST APIs with FastAPI
- Implementing JWT/OAuth2 authentication
- Setting up SQLAlchemy async databases
- Integrating Redis/Upstash caching and rate limiting
- Refactoring AI-generated Python code
- Designing API patterns and project structure
## Core Principles
1. **Async-first** - Use async/await for I/O operations
2. **Type everything** - Pydantic models for validation
3. **Dependency injection** - Use FastAPI's Depends()
4. **Fail fast** - Validate early, use HTTPException
5. **Security by default** - Never trust user input
## Quick Patterns
### Project Structure
```
src/
├── auth/
│ ├── router.py # endpoints
│ ├── schemas.py # pydantic models
│ ├── models.py # db models
│ ├── service.py # business logic
│ └── dependencies.py
├── posts/
│ └── ...
├── config.py
├── database.py
└── main.py
```
### Async Routes
```python
# BAD - blocks event loop
@router.get("/")
async def bad():
time.sleep(10) # Blocking!
# GOOD - runs in threadpool
@router.get("/")
def good():
time.sleep(10) # OK in sync function
# BEST - non-blocking
@router.get("/")
async def best():
await asyncio.sleep(10) # Non-blocking
```
### Pydantic Validation
```python
from pydantic import BaseModel, EmailStr, Field
class UserCreate(BaseModel):
email: EmailStr
username: str = Field(min_length=3, max_length=50, pattern="^[a-zA-Z0-9_]+$")
age: int = Field(ge=18)
```
### Dependency Injection
```python
async def get_current_user(token: str = Depends(oauth2_scheme)) -> User:
payload = decode_token(token)
user = await get_user(payload["sub"])
if not user:
raise HTTPException(401, "User not found")
return user
@router.get("/me")
async def get_me(user: User = Depends(get_current_user)):
return user
```
### SQLAlchemy Async
```python
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
engine = create_async_engine(DATABASE_URL, pool_pre_ping=True)
SessionLocal = async_sessionmaker(engine, expire_on_commit=False)
async def get_session() -> AsyncGenerator[AsyncSession, None]:
async with SessionLocal() as session:
yield session
```
### Redis Caching
```python
from upstash_redis import Redis
redis = Redis.from_env()
@app.get("/data/{id}")
def get_data(id: str):
cached = redis.get(f"data:{id}")
if cached:
return cached
data = fetch_from_db(id)
redis.setex(f"data:{id}", 600, data)
return data
```
### Rate Limiting
```python
from upstash_ratelimit import Ratelimit, SlidingWindow
ratelimit = Ratelimit(
redis=Redis.from_env(),
limiter=SlidingWindow(max_requests=10, window=60),
)
@app.get("/api/resource")
def protected(request: Request):
result = ratelimit.limit(request.client.host)
if not result.allowed:
raise HTTPException(429, "Rate limit exceeded")
return {"data": "..."}
```
## Reference Documents
For detailed patterns, see:
| Document | Content |
|----------|---------|
| `references/fastapi_patterns.md` | Project structure, async, Pydantic, dependencies, testing |
| `references/security_patterns.md` | JWT, OAuth2, password hashing, CORS, API keys |
| `references/database_patterns.md` | SQLAlchemy async, transactions, eager loading, migrations |
| `references/upstash_patterns.md` | Redis, rate limiting, QStash background jobs |
## Resources
- [FastAPI Documentation](https://fastapi.tiangolo.com/)
- [SQLAlchemy 2.0 Documentation](https://docs.sqlalchemy.org/)
- [Upstash Documentation](https://upstash.com/docs)
- [Pydantic Documentation](https://docs.pydantic.dev/)
© jiatastic · MIT · jiatastic/open-python-skills