Smart Drone E88 Pro HD Camera Shoot OriginalBadan yang dapat dilipat, dilengkapi dengan tas penyimpanan gratis. Waktu penerbangan : 20 menit. Jarak kendali jarak jauh : sekitar 150 meter. Sinyal video : WiFi Buy |
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