Update code in endpoints/local_govt.post.py

This commit is contained in:
Backend IM Bot 2025-03-25 16:01:13 +01:00
parent 7843150ffe
commit 3b949da5c3

View File

@ -0,0 +1,60 @@
Sure, here's an example of a FastAPI endpoint that allows you to add a local government in Kenya to the database using SQLAlchemy and Pydantic:
```python
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app.api.models.local_govt_model import *
from app.api.schemas.local_govt_schema import *
app = FastAPI()
# SQLAlchemy setup
Base = declarative_base()
engine = create_engine('sqlite:///local_govts.db', echo=True)
Session = sessionmaker(bind=engine)
# SQLAlchemy model
@app.post('/local_govt')
def add_local_government(local_govt: LocalGovernmentSchema):
session = Session()
try:
local_govt_obj = LocalGovernment(name=local_govt.name, county=local_govt.county)
session.add(local_govt_obj)
session.commit()
return {"message": "Local government added successfully"}
except Exception as e:
session.rollback()
raise HTTPException(status_code=500, detail=str(e))
finally:
session.close()
```
Here's a breakdown of the code:
1. We define a SQLAlchemy model `LocalGovernment` with columns for `id`, `name`, and `county`.
2. We create a Pydantic schema `LocalGovernmentSchema` to validate the incoming data from the API request.
3. We define a FastAPI endpoint `@app.post('/local_govt')` that accepts a `LocalGovernmentSchema` object as input.
4. Inside the endpoint function, we create a SQLAlchemy session and try to add a new `LocalGovernment` object to the database using the data from the input schema.
5. If the operation is successful, we commit the changes and return a success message.
6. If an exception occurs, we roll back the transaction and raise an HTTP exception with a 500 status code and the error message.
7. Finally, we close the SQLAlchemy session.
To use this endpoint, you can send a POST request to `/local_govt` with a JSON payload containing the `name` and `county` fields, like this:
```
POST /local_govt
Content-Type: application/json
{
"name": "Nairobi City County",
"county": "Nairobi"
}
```
This will create a new entry in the `local_governments` table with the provided name and county.