diff --git a/endpoints/people.post.py b/endpoints/people.post.py new file mode 100644 index 0000000..ebf928f --- /dev/null +++ b/endpoints/people.post.py @@ -0,0 +1,63 @@ +Sure, here's an example of a FastAPI endpoint that saves people of France 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.people_model import * +from app.api.schemas.people_schema import * +app = FastAPI() + +# SQLAlchemy setup +Base = declarative_base() +engine = create_engine('sqlite:///people.db', connect_args={'check_same_thread': False}) +Session = sessionmaker(bind=engine) + +# SQLAlchemy model + + class Config: + orm_mode = True + +# FastAPI endpoint +@app.post('/people', response_model=PersonSchema) +def create_person(person: PersonSchema): + session = Session() + try: + new_person = Person(name=person.name, city=person.city) + session.add(new_person) + session.commit() + return new_person + 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 import the necessary modules and create a FastAPI instance. +2. We set up SQLAlchemy with a SQLite database and define a `Person` model with `name` and `city` columns. +3. We create a Pydantic schema `PersonSchema` to validate the request data. +4. We define a FastAPI endpoint `/people` with the `POST` method and use the `PersonSchema` as the request body and response model. +5. Inside the endpoint function `create_person`, we create a new SQLAlchemy session and try to add a new `Person` instance to the database using the provided `name` and `city` from the request data. +6. If the operation is successful, we commit the changes and return the newly created `Person` instance. +7. If an exception occurs, we roll back the transaction and raise an `HTTPException` with a 500 status code and the error message. +8. Finally, we close the SQLAlchemy session. + +To use this endpoint, you can send a POST request to `http://localhost:8000/people` with a JSON payload containing the `name` and `city` fields, like this: + +```json +{ + "name": "John Doe", + "city": "Paris" +} +``` + +The endpoint will create a new person in the database and return the created person object as a JSON response. + +Note: Make sure you have the required dependencies installed (`fastapi`, `pydantic`, and `sqlalchemy`). \ No newline at end of file