7. SQLAlchemy 비동기 데이터베이스

# 7 강. SQLAlchemy 비동기 데이터베이스 ## 🎯 학습 목표 - AsyncEngine 과 AsyncSession 설정 - 비동기 CRUD 연산 - N+1 문제 해결 --- ## 1. AsyncEngine 설정 ```python from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession DATABASE_URL = "postgresql+asyncpg://user:pass@localhost/dbname" engine = create_async_engine( DATABASE_URL, pool_pre_ping=True, ) AsyncSessionLocal = sessionmaker( bind=engine, class_=AsyncSession, expire_on_commit=False, ) ``` --- ## 2. 비동기 CRUD ```python @app.post("/users", response_model=User) async def create_user(user: UserCreate, db: AsyncSession = Depends(get_db)): db_user = User(**user.model_dump()) db.add(db_user) await db.commit() await db.refresh(db_user) return db_user ``` --- ## 3. N+1 문제 해결 ```python from sqlalchemy.orm import selectinload # ✅ selectinload 로 2 번 쿼리 result = await db.execute( select(User).options(selectinload(User.posts)) ) users = result.scalars().unique().all() ```