ORM (SQLAlchemy, Prisma, Entity Framework) simplifies DB work. But it hides complexity and generates suboptimal queries.
ORM Advantages¶
- Fast development, less code
- Type safety
- Automatic migrations
- Protection against SQL injection
- Database-agnostic
Raw SQL Advantages¶
- Full control over queries
- Optimal performance for complex queries
- Window functions, CTE, recursive queries
- Less abstraction = fewer surprises
Hybrid Approach¶
SQLAlchemy — ORM for CRUD¶
user = session.query(User).filter(User.id == 1).first()
Raw SQL for complex queries¶
result = session.execute(text(‘’’ WITH monthly AS ( SELECT DATE_TRUNC(‘month’, created_at) as month, COUNT(*) as cnt FROM orders WHERE user_id = :uid GROUP BY 1 ) SELECT month, cnt, AVG(cnt) OVER() as avg_orders FROM monthly ‘’‘), {‘uid’: user_id})
Key Takeaway¶
ORM for CRUD, raw SQL for analytics and optimization. Hybrid approach is pragmatic.
databaseormsqlbest practices