Drone Pemula Murah Visuo XS816 XS809SSatu2nya Drone dibawah 1juta dgn camera 4K dual, dan bisa terbang +/- 20menit nonstop. Dual Camera ; camera depan & bawah sehingga tidak dibutuhkan lagi wide angel camera yang menjadikan image terlihat oval Free Klik Disini ! |
Pada tutorial sebelumnya kita telah belajar cara koneksi ke database Mysql dan get data menggunakan FastAPI.
Pada tutorial kali ini kita akan belajar bagaimana FastAPI melakukan operasi Create, Update dab Delete data ke database Mysql.
Pastikan Anda telah mengikuti tutorial sebelumnya, karena repository yang kita gunakan dari repository yang ada di tutorial FastAPI Mysql.
Pastikan juga Anda telah berada pada mode python virtual environment, jika belum Anda membaca tutorial tentang membuat project environment di python.
Kita akan membuat 4 method di class CRUDBase yaitu get(), create(), update() dan remove().
def get(self, db: Session, id: Any) -> Optional[ModelType]:
return db.query(self.model).filter(self.model.id == id).first()def create(self, db: Session, *, obj_in: CreateSchemaType) -> ModelType:
obj_in_data = jsonable_encoder(obj_in)
db_obj = self.model(**obj_in_data) # type: ignore
db.add(db_obj)
db.commit()
db.refresh(db_obj)
return db_objdef update(
self,
db: Session,
*,
db_obj: ModelType,
obj_in: Union[UpdateSchemaType, Dict[str, Any]]
) -> ModelType:
obj_data = jsonable_encoder(db_obj)
if isinstance(obj_in, dict):
update_data = obj_in
else:
update_data = obj_in.dict(exclude_unset=True)
for field in obj_data:
if field in update_data:
setattr(db_obj, field, update_data[field])
db.add(db_obj)
db.commit()
db.refresh(db_obj)
return db_objdef remove(self, db: Session, *, id: int) -> ModelType:
obj = db.query(self.model).get(id)
db.delete(obj)
db.commit()
return obj
Setelah Anda membuat global method di class CRUDBase(), buat terlebih dahulu schema untuk create dan update data.
class CustomerCreate(CustomerBase):
customer_number: str
name: str
class CustomerUpdate(CustomerBase):
customer_number: str
name: str
Anda telah membuat globa method CRUD dan juga schema create dan update customer, selanjutnya yang perlu Anda buat adalah method create data customer.
def create(self, db:Session, *, obj_in: CustomerCreate) -> modelCustomers:
db_obj = modelCustomers(
customer_number = obj_in.customer_number,
name = obj_in.name,
updated_at = datetime.now()
)
db.add(db_obj)
db.commit()
db.refresh(db_obj)
return db_obj
Saatnya kita memasuki bagian terakhir pada tutorial ini, yaitu menambahkan method create, update dan delete pada routing project Anda.
@router.post("/", response_model=customers.Customers)
def create_customer(
*,
db: Session = Depends(deps.get_db),
customer_in: customers.CustomerCreate
) -> Any:
customer = crud_customers.customers.create(db, obj_in=customer_in)
return customer@router.put("/{id}", response_model=customers.Customers)
def update_customer(
*,
db: Session = Depends(deps.get_db),
id: int,
customer_in: customers.CustomerUpdate
) -> Any:
customer = crud_customers.customers.get(db=db, id=id)
if not customer:
raise HTTPException(status_code=404, detail="Customer not found")
customer = crud_customers.customers.update(db=db, db_obj=customer, obj_in=customer_in)
return customer@router.delete("/{id}", response_model=customers.Customers)
def delete_customers(
*,
db: Session = Depends(deps.get_db),
id: int
) -> Any:
customer = crud_customers.customers.get(db=db, id=id)
if not customer:
raise HTTPException(status_code=404, detail="Customer not found")
customer = crud_customers.customers.remove(db=db, id=id)
return customer
uvicorn main:app --reload
curl --location 'http://localhost:8000/api/v1/customers' \
--header 'Content-Type: application/json' \
--data '{
"customer_number": "00213",
"name": "Johan Harsa"
}'
curl --location --request PUT 'http://localhost:8000/api/v1/customers/5' \
--header 'Content-Type: application/json' \
--data '{
"customer_number": "89898",
"name": "alfin"
}'
curl --location --request DELETE 'http://localhost:8000/api/v1/customers/5'
Github: https://github.com/halovina/fa-example/tree/fastapi-crud