MediaProcessing/apps/py-metadata/db/database.py
2026-01-04 15:12:59 +01:00

54 lines
2.0 KiB
Python

from config.database_config import DatabaseConfig
from utils.logger import logger
import mysql.connector
from mysql.connector import Error
from utils.backoff import wait_with_backoff
class Database:
def __init__(self, config: DatabaseConfig):
self.config = config
self.conn = None
def connect(self):
"""Koble til DB med backoff."""
self.config.validate()
while True:
try:
self.conn = mysql.connector.connect(
host=self.config.address,
user=self.config.username,
password=self.config.password,
database=self.config.name
)
if self.conn.is_connected():
logger.info("✅ Tilkoblet til databasen")
return
except Error as e:
logger.error(f"❌ DB-tilkobling feilet: {e}")
for _ in wait_with_backoff():
try:
self.conn = mysql.connector.connect(
host=self.config.address,
user=self.config.username,
password=self.config.password,
database=self.config.name
)
if self.conn.is_connected():
logger.info("✅ Tilkoblet til databasen")
return
except Error:
continue
def validate(self):
"""Sjekk at tilkoblingen er aktiv."""
if not self.conn or not self.conn.is_connected():
logger.warning("⚠️ Tilkobling mistet, prøver igjen...")
self.connect()
def query(self, sql: str, params=None):
"""Kjør en spørring med validering."""
self.validate()
cursor = self.conn.cursor(dictionary=True)
cursor.execute(sql, params or ())
return cursor.fetchall()