FastAPI Mysql CRUD, Membangun Microservice Dengan FastAPI

Subscribe Dengan Account Google Untuk Membaca Artikel Tanpa Iklan
FastAPI Mysql CRUD, Membangun Microservice Dengan FastAPI

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().

1) crud/base.py


Buka file "crud/base.py", tambahkan global method berikut ini:

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_obj

def 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_obj

def 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.

2) schemas/customers.py


Buka file "schemas/customers.py", lalu tambahkan class schema untuk create dan update customer. Perhatikan code berikut:

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.

3) crud/crud_customers.py


Buka file "crud/crud_customers.py", pada class CRUDCustomers tambahkan method berikut ini:

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.

4) api/api_v1/endpoints/customers.py


Buka file "api/api_v1/endpoints/customers.py", tambahkan method berikut ini:

@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

 

5) Runing project


uvicorn main:app --reload

6) Test Menggunakan CURL / POSTMAN


a) Create Customer

curl --location 'http://localhost:8000/api/v1/customers' \
--header 'Content-Type: application/json' \
--data '{
"customer_number": "00213",
"name": "Johan Harsa"
}'

b) Update Customer

curl --location --request PUT 'http://localhost:8000/api/v1/customers/5' \
--header 'Content-Type: application/json' \
--data '{
"customer_number": "89898",
"name": "alfin"
}'

c) Delete Customer

curl --location --request DELETE 'http://localhost:8000/api/v1/customers/5'

7) Video Tutorial


Githubhttps://github.com/halovina/fa-example/tree/fastapi-crud

Baca artikel lainya:


  1. Hello world, membangun microservice dengan FastAPI

  2. FastAPI APIRouter, Membangun microservice dngan FastAPI

  3. Mini Wallet Bagian 1 - Django Template dan Static File

  4. Mini Wallet Bagian 2 - Django Template Base HTML

  5. Mini Wallet Bagian 3 - Dajngo Model dan Koneksi Database MySQL

  6. Tutorial bassic Mysql bagian 1 - Create Read Update Delete

  7. Tutorial bassic Mysql bagian 2 - Inner, Left, Right, Cross Join

  8. Tutorial bassic Mysql bagian 3 - Filtering Data

  9. Tutorial bassic Mysql bagian 4 - Grouping Data 

  10. Tutorial bassic Mysql bagian 5 - Operator dan Clausa

  11. Tutorial bassic Mysql bagian 6 - Replace Statement

  12. Tutorial bassic Mysql bagian 7 - Constraint Data

  13. Tutorial bassic Mysql bagian 8 - Mengubah Struktur tabel

  14. Tutorial bassic Mysql bagian 9 - Subquery

  15. Tutorial bassic Mysql bagian 10 - Virtual Tabel

  16. Tutorial bassic Mysql bagian 11 - Control Flow Function

  17. Membuat service OTP bagian 1 - OTP dan PIN

  18. Membuat service OTP bagian 2 - Sequence Diagram

  19. Membuat service OTP bagian 3 - Model dan Serializer

  20. Membuat  service OTP bagian 4 - Validate OTP

  21. Membuat  service OTP bagian 5 - Api Client Service

  22. Membuat service user login bagian 1 - Konfigurasi Database

  23. Membuat service user login bagian 2 - Serializer dan JWT

  24. Membuat CRUD service product bagian 1 - Models Product

  25. Membuat CRUD service product bagian 2 - Function Serializer

  26. Membuat CRUD service product bagian 3 - Api Client Service

  27. Membaut CRUD service product bagian 4 - Auth User

  28. Membuat CRUD service product bagian 5 - TDR File Log

  29. Membuat CRUD service product bagian 6 - Unit Test

  30. Membuat service user register bagian 1 - Django

  31. Membuat Service user register bagian 2 - Django

  32. Membuat service filter dan download file CSV di django

  33. Django upload file menggunakan FileSystemStorage