Список использованных источников
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