master-floor/robbery/master_pol-module_1_2/app/database/db.py
2025-11-26 19:31:33 +03:00

84 lines
3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import pymysql as psql
from dto.partners_dto import PartnerUpdateDto
class Database:
def __init__(self, host, user, password, db):
self.connection = psql.connect(
host=host,
user=user,
password=password,
database=db,
cursorclass=psql.cursors.DictCursor,
)
def authorize_user(self, username, password):
query = "SELECT * FROM users WHERE username=%s AND password=%s"
with self.connection.cursor() as cur:
cur.execute(query, (username, password))
result = cur.fetchone()
return result is not None
def execute_select(self, query, params=None):
"""Выполняет SELECT запрос и возвращает результаты"""
with self.connection.cursor() as cur:
if params:
cur.execute(query, params)
else:
cur.execute(query)
return cur.fetchall()
def get_partner_types(self):
"""Получает все типы партнеров из таблицы partner_types"""
query = "SELECT * FROM partners_type"
with self.connection.cursor() as cur:
cur.execute(query)
return cur.fetchall()
def update_partner(self, partners_info: PartnerUpdateDto):
with self.connection.cursor() as cur:
cur.callproc(
"upd_partner",
(
partners_info.partner_type_id,
partners_info.id,
partners_info.partner_name,
partners_info.first_name,
partners_info.last_name,
partners_info.middle_name,
partners_info.email,
partners_info.phone,
partners_info.address,
partners_info.inn,
partners_info.rating,
),
)
self.connection.commit()
def get_disc(self, partner_name):
"""
Получает скидку для партнера, вызывая функцию get_disc из БД
"""
# Сначала получим ID партнера по его имени
query = "SELECT id FROM partners WHERE partner_name = %s"
with self.connection.cursor() as cur:
cur.execute(query, (partner_name,))
result = cur.fetchone()
if not result:
return 0
# Вызываем функцию get_disc из БД
query = "SELECT get_disc(%s) as discount"
cur.execute(query, (result["id"],))
discount_result = cur.fetchone()
return discount_result["discount"] if discount_result else 0
db = None
try:
db = Database(host="localhost", user="root", password="", db="master_pol")
print("Database connection established.")
except psql.MySQLError as e:
print(f"Error connecting to database: {e}")