Привет! Меня зовут Максим, и я хотел бы поделиться с тобой своим опытом в написании приложения FastAPI с использованием асинхронности и подключением к базе данных Postgres. Это отличный инструмент для создания веб-сервисов, который предоставляет возможность разработки API быстро и эффективно.Для начала, нам понадобится установить необходимые пакеты. Можно сделать это с помощью pip, выполнив следующую команду в терминале.python
pip install fastapi[all]
После установки FastAPI мы можем приступить к созданию нашего приложения. Создайте новый файл `main.py` и откройте его в любом удобном текстовом редакторе.python
from fastapi import FastAPI
app FastAPI
Далее, нам нужно создать подключение к базе данных Postgres. Вам понадобится установить библиотеку `asyncpg`, которая обеспечивает асинхронное взаимодействие с Postgres.python
import asyncpg
async def get_database_connection⁚
return await asyncpg.connect(user’your_username’, password’your_password’,
database’your_database’, host’your_host’)
Здесь вам нужно заменить `’your_username’`, `’your_password’`, `’your_database’` и `’your_host’` на соответствующие значения для вашей базы данных.
Далее, создайте таблицу ″Задачи″ в базе данных. Для этого мы создадим файл `.env`, в котором будут храниться данные о подключении к базе данных.DATABASE_URLpostgresql://your_username:your_password@your_host/your_database
Также, нам понадобится библиотека `python-dotenv`, чтобы использовать переменные из файла `.env`.python
from dotenv import load_dotenv
load_dotenv
Теперь мы можем создать таблицу ″Задачи″ при первом запуске приложения. Для этого используем функцию `on_startup`, которая будет выполняться при старте приложения.python
@app.on_event(″startup″)
async def setup_database⁚
conn await get_database_connection
await conn.execute(″″″
CREATE TABLE IF NOT EXISTS tasks (
id SERIAL PRIMARY KEY,
name TEXT,
parent_id INTEGER REFERENCES tasks (id),
performer TEXT,
deadline DATE,
status TEXT
)
″″″)
await conn.close
Теперь у нас есть таблица ″Задачи″, и мы можем приступить к созданию CRUD-операций для работы с этой таблицей. Давайте создадим эндпоинты для создания, чтения, обновления и удаления задач.python
from pydantic import BaseModel
from typing import Optional
class Task(BaseModel)⁚
name⁚ str
parent_id⁚ Optional[int] None
performer⁚ str
deadline⁚ str
status⁚ str
@app.post(″/tasks»)
async def create_task(task⁚ Task)⁚
conn await get_database_connection
await conn.execute(″″″
INSERT INTO tasks (name, parent_id, performer, deadline, status)
VALUES ($1, $2, $3, $4, $5)
″″″, task.name, task.parent_id, task.performer, task.deadline, task.status)
await conn.close
return {″message″⁚ ″Task created successfully″}
@app.get(″/tasks»)
async def get_tasks⁚
conn await get_database_connection
records await conn.fetch(″″″
SELECT * FROM tasks
″″″)
tasks []
for record in records⁚
task {
″id″⁚ record[″id″],
″name″⁚ record[″name″],
″parent_id″⁚ record[″parent_id″],
″performer″⁚ record[″performer″],
″deadline″⁚ record[″deadline″],
″status″⁚ record[″status″]
}
tasks.append(task)
await conn.close
return tasks
@app.put(″/tasks/{task_id}»)
async def update_task(task_id⁚ int, task⁚ Task)⁚
conn await get_database_connection
await conn.execute(″″″
UPDATE tasks
SET name $1, parent_id $2, performer $3, deadline $4, status $5
WHERE id $6
″″″, task.name, task.parent_id, task.performer, task.deadline, task.status, task_id)
await conn.close
return {″message″⁚ f″Task with id {task_id} updated successfully″}
@app.delete(″/tasks/{task_id}»)
async def delete_task(task_id⁚ int)⁚
conn await get_database_connection
await conn.execute(″″″
DELETE FROM tasks
WHERE id $1
″″″, task_id)
await conn.close
return {″message″⁚ f″Task with id {task_id} deleted successfully″}
Теперь, когда наше приложение готово, давайте подготовим его для развёртывания на другом компьютере. Сначала установите все необходимые пакеты и скопируйте файлы `main.py` и `.env` на другой компьютер. Затем выполните следующую команду в терминале, чтобы запустить приложение.python
uvicorn main⁚app —reload
Теперь вы можете открыть браузер и перейти по адресу `http://localhost:8000/docs`, чтобы увидеть документацию API и протестировать его функциональность.
Я надеюсь, что эта пошаговая инструкция была полезной для тебя! Удачи в создании своего приложения FastAPI с подключением к базе данных Postgres и использованием асинхронности. Если у тебя есть какие-либо вопросы, не стесняйся задавать их!