Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

6 СЕМЕСТР / ЛР / ЛР1 / БД ЛР1

.pdf
Скачиваний:
14
Добавлен:
25.06.2023
Размер:
545.82 Кб
Скачать

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

1) Турнецкая Е.Л. Базы данных. / Методические указания по

выполнению лабораторных работ. – СПб: ГУАП, 2021

11

ПРИЛОЖЕНИЕ A. Код программы

import psycopg2 as psy import pandas as pd

import matplotlib.pyplot as plt

# Подключение к БД db_connect_kwargs = {

'dbname': 'musicalgroup', 'user': 'postgres', 'password': '12345678qwerty', 'host': 'localhost',

'port': '5432'

}

#Вывод таблицы

try:

connection = psy.connect(**db_connect_kwargs) connection.autocommit = True

cursor = connection.cursor()

#Запрос на вывод таблицы cursor.execute('SELECT * FROM musicalgroup') rows = cursor.fetchall()

df_musicalgroup = pd.DataFrame(rows) print(df_musicalgroup)

# Запрос 1

cursor.execute('''SELECT concertname, count(ticketid)

FROM ticket

JOIN concert USING(concertid) GROUP BY concertname

ORDER BY 2 DESC''') rows = cursor.fetchall()

df_zap_1 = pd.DataFrame(rows) print(df_zap_1)

# График запроса 1

fig, ax = plt.subplots()

plt.title('Кол-во билетов проданых на концерты') ax.set_xlabel('Название концерта') ax.set_ylabel('Кол-во билетов') plt.bar(df_zap_1[0], df_zap_1[1])

12

plt.tight_layout() plt.show()

# Запрос 2 cursor.execute('''SELECT OrderDate,

count(OrderDate) ticket_count, sum(Price) price_sum, ROUND(avg(Price), 2) avg_price

FROM Orders

JOIN ticket USING(TicketID) JOIN location USING(LocationID)

GROUP BY OrderDate

ORDER BY avg_price DESC''') rows = cursor.fetchall()

df_zap_2 = pd.DataFrame(rows) print(df_zap_2)

# График запроса 2

fig, ax = plt.subplots() plt.title('Объем продаж по дням') ax.set_xlabel('Дата') ax.set_ylabel('Сумма продаж') plt.tick_params(axis='x',rotation=45) plt.plot(df_zap_2[0], df_zap_2[2]) plt.tight_layout()

plt.show()

# Запрос 3 cursor.execute('''SELECT BandName,

count(*) as concert_count

FROM MusicalGroup

 

JOIN

Concert

USING(MusicalGroupID)

 

JOIN Contract USING(ConcertID) WHERE ConcertDate BETWEEN '2021-10-

15' AND '2021-12-15'

GROUP BY BandName''') rows = cursor.fetchall()

df_zap_3 = pd.DataFrame(rows) print(df_zap_3)

# График запроса 3

fig, ax = plt.subplots()

13

plt.title('Доля концертов по группам проведенных с

2021-10-15 по 2021-12-15') plt.pie(df_zap_3[1], labels=df_zap_3[0]) plt.tight_layout()

plt.show()

except Exception as _ex:

print('[INFO] Error while working with PostgreSQL', _ex)

finally:

if connection: connection.close() cursor.close()

print("[INFO] PostgreSQL connection closed")

14

Соседние файлы в папке ЛР1