[FastAPI]Sqlite3에 데이타 저장하기

코드왕·2023년 6월 4일
0
post-thumbnail
  1. 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)
  1. 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()
  1. 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


profile
CODE DIVE!

0개의 댓글