[FastAPI] SQLAlchemy ์์
๐ก create_engine
SQLAlchemy์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๊ฒฐ์ ์ค์ ํ๊ณ ์์ง ์์ฑ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ข ๋ฅ์ ์์น, ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด ๋ฑ์ ํฌํจํ์ฌ ์ฐ๊ฒฐ์ ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณต
๐ก sessionmaker
์ธ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ์ถ์ ํ๊ณ ์ ์ดํ๋ ๋ฐ ์ฌ์ฉ๋จ
sessionmaker๋ ์ธ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํฉํ ๋ฆฌ๋ฅผ ์์ฑํ๋ ์ญํ ์ ํจ
sessionmaker๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ ์ ์์ฑํ๋ฉด ํด๋น ์ธ์ ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์์ ์ ์ํํ ์ ์์
* ํฉํ ๋ฆฌ ๋ฉ์๋ *
๊ฐ์ฒด ์์ฑ์ ์บก์ ํํ๋ ๋์์ธ ํจํด ์ค ํ๋
SQLAlchemy์์ sessionmaker()๋ ์ธ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํํ ๋ฆฌ ๋ฉ์๋ ์ญํ
๐ก session
์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ๋ด๋นํ๋ ๊ฐ์ฒด
sessionmaker๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ์ธ์ ํฉํ ๋ฆฌ๋ฅผ ํตํด ์ธ์ ์ ์์ฑํ๊ณ ,
์ธ์ ์ ํตํด ๋ฐ์ดํฐ์ ์กฐํ, ์ถ๊ฐ, ์์ , ์ญ์ ๋ฑ์ ์์ ์ ์ํํ ์ ์์
1. ํฉํ ๋ฆฌ ์์ฑ
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
# ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด
DATABASE_URL = "sqlite:///./test.db"
# ์์ง ์์ฑ
engine = create_engine(DATABASE_URL)
# ํฉํ ๋ฆฌ ์์ฑ
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
2. ์ธ์ ๊ฐ์ฒด ์์ฑ ๋ฐ ์ฌ์ฉ
from sqlalchemy.orm import Session
from fastapi import FastAPI, Depends
app = FastAPI()
# ํฉํ ๋ฆฌ ๋ฉ์๋(SessionLocal)๋ฅผ ํธ์ถํ์ฌ ์ธ์
๊ฐ์ฒด ์์ฑ
def get_db():
db = SessionLocal()
try:
# ์ธ์
๊ฐ์ฒด๋ฅผ ๋ฆฌ์์ค๋ก์ ์ ๊ณต
yield db
finally:
db.close()
@app.post("/items/")
async def create_item(item: Item, db: Session = Depends(get_db)):
# db ์ฌ์ฉํ์ฌ ์์
์ํ
db.add(item)
db.commit()
db.refresh(item)
return item
get_db()
Depends(get_db)๋ฅผ ์ฌ์ฉํ์ฌ ์์กด์ฑ์ ์ฃผ์ ํ๋ฉด, FastAPI๊ฐ ์ธ์ ์ ๊ด๋ฆฌํ๋ฉฐ ์์ฒญ ํธ๋ค๋ฌ์์ ์ฌ์ฉํ ์ ์๋๋ก ํด์ค
์ธ์ ๊ฐ์ฒด๋ฅผ ๋ฆฌ์์ค๋ก์ ์ ๊ณตํ๋ค๋ ๊ฒ์
์ธ์ ๊ฐ์ฒด๋ฅผ ํ์๋ก ํ๋ ํจ์๋ ๋ฉ์๋์์ ์ธ์ ์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ์๋ฏธ
์ธ์ ๊ฐ์ฒด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๊ฒฐ์ ๋ํ๋ด๋ ์ค์ํ ์์
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธ์ ์ ์์ฑํ๊ณ ๋ซ๋ ๊ณผ์ ์ ์ค๋ณตํด์ ์ฒ๋ฆฌํ์ง ์๊ณ ,
ํ์ํ ๊ณณ์์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋๋ ๊ฒ์ด ์ข์
๋ฆฌ์์ค๋ก์ ์ ๊ณต๋ ์ธ์ ๊ฐ์ฒด๋ ํ์ํ ์์ ์ ์ํํ ๋ค์๋ ์๋์ผ๋ก ์ ๋ฆฌ๋์ด ๋ซํ๊ฒ ๋จ
์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์ธ์ ๊ด๋ฆฌ์ ๋ํ ๋ณต์กํ ์์ ์ ์ต์ํํ๊ณ ,
์์ ํ๊ณ ํจ์จ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ํํ ์ ์์
'WebFramework > [FastAPI]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[FastAPI] room ๊ธฐ๋ฅ ๊ตฌํ ๋ฐ worker๊ฐ ๊ณต์ (RabbitMQ) (0) | 2024.01.24 |
---|---|
[FastAPI] SocketIO ๋ง์ดํธํด์ ์ฌ์ฉํ๊ธฐ (0) | 2024.01.24 |
[FastAPI] BackgroundTasks, Celery (0) | 2024.01.09 |
[FastAPI] ์ค์ฒฉ๋ JSON ๋ชจ๋ธ(Nested JSON Models) ์ฌ์ฉ (0) | 2023.09.25 |
[wsl] ํ์ด์ฌ ๊ฐ์ํ๊ฒฝ ์ง์ bash ์ฌ์ฉ (0) | 2023.03.10 |