Добавил:
t.me Установите расширение 'SyncShare' для решения тестов в LMS (Moodle): https://syncshare.naloaty.me/ . На всякий лучше отключить блокировщик рекламы с ним. || Как пользоваться ChatGPT в России: https://habr.com/ru/articles/704600/ || Также можно с VPNом заходить в bing.com через Edge браузер и общаться с Microsoft Bing Chat, но в последнее время они форсят Copilot и он мне меньше нравится. || Студент-заочник ГУАП, группа Z9411. Ещё учусь на 5-ом курсе 'Прикладной информатики' (09.03.03). || Если мой материал вам помог - можете написать мне 'Спасибо', мне будет очень приятно :) Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 курс 1 семестр / Лабораторные / Z9411_КафкаРС_БД_ЛР7.docx
Скачиваний:
11
Добавлен:
24.10.2023
Размер:
664.16 Кб
Скачать
    1. Создание функции select_data

Создал функцию select_data в PostgreSQL, которая на вход получает код отдела и выводит информацию из таблицы departments, фильтруя данные по коду отдела.

Листинг 9 – Создание функции select_data

CREATE FUNCTION select_data(id_dept int) RETURNS SETOF departments AS $$

SELECT * FROM departments WHERE departments.department_id > id_dept;

$$ LANGUAGE SQL;

SELECT * FROM select_data(30);

Результат вызова на рисунке 12 (выведены только отделы с id>30).

Рисунок 12 – Создание функции

Теперь вернемся в Python и попробуем вызвать созданную функцию из скрипта в Python. Результат представлен на рисунке 13.

Листинг 10 – Вызов созданной функции из скрипта в Python

cursor.callproc('select_data',[20,])# вызов функции (название

из PostgreSQL)

result = cursor.fetchall() # получение результатов

result_proc = pd.DataFrame(result)# создание датафрейма с

результатом

print(result_proc)

Рисунок 13 – Вызов созданной функции из скрипта в Python

Попробуем выполнить обратное действие, создадим функцию select_data1, аналогичную функции выше в скрипте Python и внесем изменения в БД в PostgreSQL

Листинг 11 – Создание функции из Python

#код функции

postgresql_func = """

CREATE OR REPLACE FUNCTION select_data1(id_dept int) RETURNS

SETOF departments AS $$

SELECT * FROM departments WHERE departments.department_id >

id_dept;

$$ LANGUAGE SQL;

"""

cursor.execute(postgresql_func) # выполнение запроса

connection.commit() #внесение изменений в БД

connection.close() # закрытие соединения

cursor.close() # закрытие cursor

Проверим, как это выглядит в нашей СУБД (рис.13).

Рисунок 13 – Результат выполнения функции select_data1

    1. Создание собственной пользовательской функции

Создал функцию, которая вычисляет среднюю зарплату сотрудников по заданному местоположению. Функция принимает в качестве аргумента название местоположения и возвращает среднюю зарплату сотрудников в этом месте. Функция объединяет таблицы "сотрудники" и "местоположения" на основе столбца location_id и фильтрует сотрудников на основе входного аргумента местоположения. Затем функция вычисляет среднюю зарплату с помощью агрегатной функции AVG. Результат работы кода представлен на рисунке 14.

Листинг 12 – Средняя зарплата сотрудников по заданному местоположению

CREATE OR REPLACE FUNCTION average_salary_by_location(location varchar)

RETURNS float AS $$

BEGIN

RETURN (

SELECT AVG(salary)

FROM employees e

JOIN locations l ON e.location_id = l.location_id

WHERE l.city = location

);

END;

$$ LANGUAGE plpgsql;

Рисунок 14 – Средняя зарплата сотрудников по заданному местоположению

Создал эту же функцию через скрипт Python.

Листинг 13 – Средняя зарплата сотрудников по заданному местоположению в Python

#код функции

postgresql_func = """

CREATE OR REPLACE FUNCTION average_salary_by_location1(location varchar)

RETURNS float AS $$

BEGIN

RETURN (

SELECT AVG(salary)

FROM employees e

JOIN locations l ON e.location_id = l.location_id

WHERE l.city = location

);

END;

$$ LANGUAGE plpgsql;

"""

cursor.execute(postgresql_func) # выполнение запроса

connection.commit() #внесение изменений в БД

connection.close() # закрытие соединения

cursor.close() # закрытие cursor

Результат проверки продемонстрирован на рисунке 15.

Рисунок 15 – Средняя зарплата сотрудников по заданному местоположению Python

Соседние файлы в папке Лабораторные