Здравствуйте! Меня зовут Максим, и я хотел бы поделиться своим опытом использования Postgres и библиотеки psycopg2 для подключения к базе данных. В данной статье мы разберем таблицы ″employees″ и ″tasks″ с указанными полями и составим SQL-запрос٫ который вернет нужные нам данные.Для начала٫ необходимо подключиться к базе данных с помощью библиотеки psycopg2. Вот пример кода٫ который я использовал для подключения⁚
python
import psycopg2
connection psycopg2;connect(database″your_database″٫ user″your_username″٫ password″your_password″٫ host″your_host″٫ port″your_port″)
cursor connection.cursor
Замените ″your_database″, ″your_username″, ″your_password″, ″your_host″ и ″your_port″ на свои значения соответственно.Теперь, давайте перейдем к составлению SQL-запроса. Мы ищем задачи со статусом ″Важная задача″, от которых зависят другие задачи, и нам нужно вернуть имя задачи, дедлайн и список имен сотрудников, которые могут взять на себя выполнение задачи. Вот SQL-запрос, который я использовал⁚
sql
SELECT t.name, t.deadline, array_agg(e.full_name)
FROM tasks t
JOIN employees e ON t.employee_id e.id
WHERE t.status ‘Важная задача’
AND t.parent_task IS NOT NULL
GROUP BY t.name, t.deadline
ORDER BY t.name;
Этот запрос объединяет таблицы ″tasks″ и ″employees″ по полю ″employee_id″, фильтрует задачи с указанным статусом и дополнительно проверяет наличие зависимостей от других задач. Затем, он группирует результаты по имени задачи и дедлайну, и сортирует по имени задачи.Далее, после выполнения SQL-запроса, мы можем обработать результаты в коде Python. Например, вот как я представил результаты в виде списка словарей⁚
python
result cursor.fetchall
tasks []
for row in result⁚
task {
″name″⁚ row[0],
″deadline″⁚ row[1],
″employees″⁚ row[2]
}
tasks.append(task)
Теперь у нас есть список словарей ″tasks″, где каждый словарь содержит имя задачи, дедлайн и список имен сотрудников, которые могут выполнить эту задачу.