- models.py파일을 만든다.
from sqlalchemy import Column,Integer,String
from database import Base
class Books(Base):
__tablename__="books"
id=Column(Integer,primary_key=True,index=True)
title=Column(String)
author=Column(String)
description=Column(String)
rating=Column(Integer)
- database.py파일을 만든다.
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
SQLALCHEMY_DABASE_URL='sqlite:///./books.db'
engine=create_engine(SQLALCHEMY_DABASE_URL,connect_args={"check_same_thread":False}
)
SessionLocal=sessionmaker(autocommit=False, autoflush=False,bind=engine)
Base = declarative_base()
- index.py
from fastapi import FastAPI,HTTPException,Depends
from pydantic import BaseModel,Field
from uuid import UUID
import models
from database import engine,SessionLocal
from sqlalchemy.orm import Session
app=FastAPI()
models.Base.metadata.create_all(bind=engine)
def get_db():
try:
db=SessionLocal()
yield db
finally:
db.close()
class Book(BaseModel):
title:str=Field(min_length=1)
author:str=Field(min_length=1,max_length=100)
description:str=Field(min_length=1,max_length=100)
rating:int=Field(gt=-1,lt=101)
BOOKS=[]
@app.get('/')
def read_api(db:Session=Depends(get_db)):
return db.query(models.Books).all()
@app.post("/")
def create_book(book:Book,db:Session=Depends(get_db)):
book_model=models.Books()
book_model.title=book.title
book_model.author=book.author
book_model.description=book.description
book_model.rating=book.rating
db.add(book_model)
db.commit()
return book
@app.put("/{book_id}")
def update_book(book_id:int,book:Book,db:Session=Depends(get_db)):
book_model=db.query(models.Books).filter(models.Books.id==book_id).first()
if book_model is None:
raise HTTPException(
status_code=404,
detail=f"ID {book_id} : Does not exist"
)
book_model.title=book.title
book_model.author=book.author
book_model.description=book.description
book_model.rating=book.rating
db.add(book_model)
db.commit()
return book
@app.delete("/{book_id}")
def delete_book(book_id:int,book:Book,db:Session=Depends(get_db)):
book_model=db.query(models.Books).filter(models.Books.id==book_id).first()
if book_model is None:
raise HTTPException(
status_code=404,
detail=f"ID {book_id} : Does not exist"
)
db.query(models.Books).filter(models.Books.id==book_id).delete()
db.commit()
return book_model