From ea6fe0e0372a3b37b2b9bb8c027f1ec1d4b140de Mon Sep 17 00:00:00 2001 From: Backend IM Bot Date: Tue, 25 Mar 2025 15:44:04 +0100 Subject: [PATCH] Update code in endpoints/countries.post.py --- endpoints/countries.post.py | 68 +++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 endpoints/countries.post.py diff --git a/endpoints/countries.post.py b/endpoints/countries.post.py new file mode 100644 index 0000000..164aa33 --- /dev/null +++ b/endpoints/countries.post.py @@ -0,0 +1,68 @@ +Sure, here's an example of a FastAPI endpoint that adds countries to the database using SQLAlchemy models and Pydantic schemas: + +```python +from typing import List +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.countries_model import * +from app.api.schemas.countries_schema import * +from app.api.dependencies.countries_deps import * +app = FastAPI() + +# SQLAlchemy setup +Base = declarative_base() +engine = create_engine('sqlite:///countries.db', connect_args={'check_same_thread': False}) +SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) + +# Pydantic model for country data + +@app.post("/countries", response_model=List[CountryBase]) +def create_countries(countries: List[CountryBase], db=Depends(get_db)): + db_countries = [] + for country_data in countries: + db_country = Country(name=country_data.name, capital=country_data.capital, population=country_data.population) + db.add(db_country) + db_countries.append(db_country) + try: + db.commit() + except Exception as e: + db.rollback() + raise HTTPException(status_code=500, detail=str(e)) + return db_countries +``` + +Here's a breakdown of the code: + +1. We define a Pydantic model `CountryBase` to validate the incoming country data. +2. We define an SQLAlchemy model `Country` to represent the database table. +3. We set up the SQLAlchemy engine and session maker. +4. We define a dependency function `get_db` to provide a database session for each request. +5. We define the `/countries` endpoint using the `@app.post` decorator. +6. The endpoint takes a list of `CountryBase` objects as input and a database session (`db`) as a dependency. +7. For each `CountryBase` object in the input list, we create a new `Country` instance and add it to the database session. +8. We commit the changes to the database and return the list of created `Country` instances as the response. +9. If an exception occurs during the database operation, we roll back the transaction and raise an `HTTPException` with a 500 status code and the error message. + +To use this endpoint, you can send a POST request to `/countries` with a JSON payload containing a list of country objects, like this: + +```json +[ + { + "name": "United States", + "capital": "Washington, D.C.", + "population": 328000000 + }, + { + "name": "Canada", + "capital": "Ottawa", + "population": 37600000 + } +] +``` + +The endpoint will create new rows in the `countries` table for each country in the input list and return the created country objects as the response. \ No newline at end of file