Добавил:
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 Кб
Скачать

Заключение

Самое первое, чем хочется поделиться – я понял, что при опции «обновление» в DBeaver нужно выделять именно тот объект, который нужно обновить. Иначе, он будет обновлять только ту область, где было выполнено это действие. Во время выполнения работы я обнаружил схему «hr», которая была создана в предыдущей лабораторной работе, но не отображалась у меня. Я обновил именно папку схем, и тогда смог обнаружить «hr» схему.

Из-за того, что hr схему я не использовал, но установил search_path на неё – у меня были сложности в написании запросов, т.к. таблицы не находились и нужно было конкретно указывать схему «public» в каждом упоминании таблицы. Как я понял эту проблему – изменил search_path обратно на public и запросы выполнялись без дополнительных вставок/уточнений.

Что касается остальной лабораторной работы – у меня получилось выполнить её в полном объёме. Я произвёл связь базы данных в PostgreSQL и Python, изучил операции по манипулированию с данными БД, а также созданию простейших пользовательских функций.

Список использованных источников

  • Официальная документация PostgreSQL: https://www.postgresql.org/docs/ (дата обращения 29.01.2023)

  • Официальная документация по Python: https://docs.python.org/3/ (дата обращения 29.01.2023)

  • Psycopg2 - адаптер Python для PostgreSQL: http://initd.org/psycopg/docs/ (дата обращения 29.01.2023)

  • SQL Alchemey - объектно-реляционное отображение для Python: https://docs.sqlalchemy.org/en/13/ (дата обращения 29.01.2023)

  • DataCamp - комплексная платформа для обучения науке о данных и аналитике: https://www.datacamp.com/ (дата обращения 29.01.2023)

  • Coursera - платформа онлайн-обучения с курсами в различных областях, включая базы данных и программирование: https://www.coursera.org/ (дата обращения 29.01.2023)

  • W3Schools - комплексная платформа для обучения веб-разработке и программированию: https://www.w3schools.com/sql/

Приложение а Полный листинг кодов

Листинг А.1

import pandas as pd

import psycopg2

# Подключение к базе данных:

connection = psycopg2.connect(database="students",

user="postgres",

password="123",

host="127.0.0.1",

port="5432")

cursor = connection.cursor() # курсор для выполнения операций с БД

print(connection.get_dsn_parameters(), "\n") # вывод свойства соединения

cursor.execute("SELECT version();") # выполнение запроса к БД

version_ps = cursor.fetchone() # получение результата запроса

print("Вы подключены к - ", version_ps, "\n")

cursor.close()

connection.close()

Листинг А.2

import pandas as pd

import psycopg2

connection = psycopg2.connect(database="students",

user="postgres",

password="123",

host="127.0.0.1",

port="5432")

cursor = connection.cursor()

cursor.execute('''CREATE TABLE if not exists public.locations

(location_id int PRIMARY KEY,

city varchar(30),

postal_code varchar(12)

); ''')

connection.commit()

cursor.close()

connection.close()

Листинг А.3

import pandas as pd

import psycopg2

connection = psycopg2.connect(database="students",

user="postgres",

password="123",

host="127.0.0.1",

port="5432")

cursor = connection.cursor()

cursor.execute('''

INSERT INTO public.locations VALUES ( 1,'Roma', '00989');

INSERT INTO public.locations VALUES ( 2,'Venice','10934');

INSERT INTO public.locations VALUES ( 3,'Tokyo', '1689');

INSERT INTO public.locations VALUES ( 4,'Hiroshima','6823');

INSERT INTO public.locations VALUES ( 5,'Southlake', '26192');

INSERT INTO public.locations VALUES ( 6,'South San Francisco', '99236');

INSERT INTO public.locations VALUES ( 7,'South Brunswick','50090');

INSERT INTO public.locations VALUES ( 8,'Seattle','98199');

INSERT INTO public.locations VALUES ( 9,'Toronto','M5V 2L7');

INSERT INTO public.locations VALUES ( 10,'Whitehorse','YSW 9T2');

''')

connection.commit()

cursor.close()

connection.close()

Листинг А.4

import psycopg2

import random

connection = psycopg2.connect(database="students",

user="postgres",

password="123",

host="127.0.0.1",

port="5432")

cursor = connection.cursor()

# Add location_id column to employees table

cursor.execute("ALTER TABLE public.employees ADD COLUMN location_id int REFERENCES public.locations (location_id)")

# Fetch all location_id from locations table

cursor.execute("SELECT location_id FROM public.locations")

location_ids = cursor.fetchall()

location_ids = [location_id[0] for location_id in location_ids]

# Update location_id for each employee randomly

for i in range(1, 54):

cursor.execute(f"UPDATE public.employees SET location_id={random.choice(location_ids)} WHERE employee_id={i}")

connection.commit()

cursor.close()

connection.close()

Листинг А.5

import psycopg2

connection = psycopg2.connect(database="students",

user="postgres",

password="123",

host="127.0.0.1",

port="5432")

cursor = connection.cursor()

query = "SELECT job_title FROM public.jobs WHERE min_salary < 2500;"

cursor.execute(query)

result = cursor.fetchall()

for record in result:

print(record[0])

connection.commit()

cursor.close()

connection.close()

Листинг А.6

import psycopg2

connection = psycopg2.connect(database="students",

user="postgres",

password="123",

host="127.0.0.1",

port="5432")

cursor = connection.cursor()

query = """

SELECT e.first_name AS employee, m.first_name AS boss

FROM public.employees e

JOIN public.employees m ON e.manager_id = m.employee_id

"""

cursor.execute(query)

result = cursor.fetchall()

for row in result:

print(row[0], "is managed by", row[1])

cursor.close()

connection.close()

Листинг А.7

import psycopg2

connection = psycopg2.connect(database="students",

user="postgres",

password="123",

host="127.0.0.1",

port="5432")

cursor = connection.cursor()

query = """

SELECT e.first_name, e.last_name, m.first_name, m.last_name

FROM public.employees e

JOIN public.employees m ON e.manager_id = m.employee_id

"""

cursor.execute(query)

result = cursor.fetchall()

for r in result:

print(f"Employee: {r[0]} {r[1]}, Manager: {r[2]} {r[3]}")

cursor.close()

connection.close()

Листинг А.8

import psycopg2

connection = psycopg2.connect(database="students",

user="postgres",

password="123",

host="127.0.0.1",

port="5432")

cursor = connection.cursor()

query = """

SELECT e.employee_id, e.first_name, e.last_name, l.city, l.postal_code

FROM public.employees e

INNER JOIN public.locations l

ON e.location_id = l.location_id;

"""

cursor.execute(query)

result = cursor.fetchall()

for row in result:

print(row)

connection.commit()

connection.close()

Листинг А.9

import psycopg2

import pandas as pd

connection = psycopg2.connect(database="students",

user="postgres",

password="123",

host="127.0.0.1",

port="5432")

cursor = connection.cursor()

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

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

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

print(result_proc)

connection.commit()

connection.close()

Листинг А.10

import psycopg2

import pandas as pd

connection = psycopg2.connect(database="students",

user="postgres",

password="123",

host="127.0.0.1",

port="5432")

cursor = connection.cursor()

#код функции

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

import psycopg2

import pandas as pd

connection = psycopg2.connect(database="students",

user="postgres",

password="123",

host="127.0.0.1",

port="5432")

cursor = connection.cursor()

#код функции

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

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