FastAPI — это фреймворк для создания веб-приложений на языке Python․ Он позволяет создавать масштабируемые и эффективные API․ В данной статье я расскажу о том‚ как использовать FastAPI с базой данных Postgres для создания таблицы ″Задачи″ с заданными полями․Прежде чем начать‚ необходимо установить несколько пакетов․ Мы будем использовать SQLAlchemy для работы с базой данных и asyncpg для работы с асинхронными функциями․python
pip install fastapi sqlalchemy asyncpg
Теперь‚ чтобы подключиться к базе данных‚ мы должны создать модель для таблицы ″Задачи″․ Создадим файл models․py и добавим следующий код⁚
python
from sqlalchemy import Column‚ Integer‚ String‚ ForeignKey
from sqlalchemy․orm import relationship
from database import Base
class Task(Base)⁚
__tablename__ ″tasks″
id Column(Integer‚ primary_keyTrue‚ indexTrue)
name Column(String‚ indexTrue)
parent_id Column(Integer‚ ForeignKey(″tasks․id″)‚ nullableTrue)
children relationship(″Task″)
Мы создали модель Task с полями id‚ name и parent_id․ Поле parent_id является внешним ключом‚ который ссылается на задачу в той же таблице․ Мы также создали отношение ″children″‚ чтобы можно было получить все дочерние задачи․Теперь создадим модуль database․py для подключения к базе данных⁚
python
from sqlalchemy import create_engine
from sqlalchemy․ext․declarative import declarative_base
from sqlalchemy․orm import sessionmaker
SQLALCHEMY_DATABASE_URL ″postgresql://user:password@localhost/db_name»
engine create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal sessionmaker(autocommitFalse‚ autoflushFalse‚ bindengine)
Base declarative_base
Вместо ″user⁚password@localhost/db_name» укажите свои данные для подключения к базе данных Postgres․Теперь мы можем написать эндпоинт для создания записи в БД с новой задачей․ Создайте файл main․py и добавьте следующий код⁚
python
from fastapi import FastAPI‚ Depends
from sqlalchemy․orm import Session
from database import SessionLocal‚ engine
from models import Task
app FastAPI
Base․metadata․create_all(bindengine)
@app․post(″/tasks»)
async def create_task(task⁚ Task‚ db⁚ Session Depends(get_db))⁚
db․add(task)
db․commit
db․refresh(task)
return task
Мы использовали декоратор @app․post‚ чтобы связать эндпоинт с методом POST․ Аргументы функции create_task — task⁚ Task и db⁚ Session ─ вместе с FastAPI решают‚ какое значение передавать для каждого параметра․При передаче данных в функцию create_task FastAPI будет автоматически создавать экземпляр класса Task из payload запроса (JSON)․ После добавления задачи в БД мы сохраняем изменения‚ обновляем экземпляр задачи и возвращаем его․Теперь запустите приложение с помощью команды⁚
bash
uvicorn main⁚app —reload
Откройте свой любимый HTTP-клиент и отправьте POST запрос на http://localhost:8000/tasks с JSON payload вида⁚
json
{
″name″⁚ ″Новая задача″‚
″parent_id″⁚ null
}
Вы должны получить ответ с созданной задачей⁚
json
{
″id″⁚ 1‚
″name″⁚ ″Новая задача″‚
″parent_id″⁚ null‚
″children″⁚ []
}
Поздравляю! Вы успешно создали эндпоинт для создания записи в БД с новой задачей․
В этой статье мы познакомились с FastAPI‚ подключились к базе данных Postgres‚ создали модель для таблицы ″Задачи″ с указанными полями‚ написали эндпоинт для создания записи в БД и проверили его работу․ FastAPI предоставляет великолепные возможности для разработки веб-приложений‚ и я надеюсь‚ что эта статья помогла вам освоить базовые концепции и функции․