-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase.py
More file actions
48 lines (42 loc) · 1.92 KB
/
database.py
File metadata and controls
48 lines (42 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# database.py
import psycopg2
from psycopg2 import pool
import logging
class Database:
"""
Простой класс для управления пулом соединений с PostgreSQL.
"""
def __init__(self, connection_string):
if not connection_string:
raise ValueError("Connection string cannot be empty")
try:
self.connection_pool = psycopg2.pool.SimpleConnectionPool(
1, 20, connection_string
)
logging.info("✅ Пул соединений к БД инициализирован.")
except Exception as e:
logging.error(f"❌ Ошибка при инициализации пула соединений к БД: {e}")
raise e
def get_connection(self):
"""Получает соединение из пула."""
try:
return self.connection_pool.getconn()
except Exception as e:
logging.error(f"❌ Ошибка при получении соединения из пула: {e}")
raise e
def return_connection(self, connection):
"""Возвращает соединение обратно в пул."""
if connection:
try:
if hasattr(connection, "rollback"):
connection.rollback()
self.connection_pool.putconn(connection)
except Exception as e:
logging.error(f"❌ Ошибка при возврате соединения в пул: {e}")
else:
logging.warning(" attempted to return a None connection to the pool.")
def close_all(self):
"""Закрывает все соединения в пуле."""
logging.info("⏳ Закрытие всех соединений пула БД...")
self.connection_pool.closeall()
logging.info("✅ Соединения пула БД закрыты.")