· 7 months ago · Feb 11, 2025, 08:10 PM
1import psycopg2
2from database.database_interface import DatabaseInterface
3
4
5class Database(DatabaseInterface):
6 def __init__(self):
7 self.host = None
8 self.port = None
9 self.database = None
10 self.user = None
11 self.password = None
12 self.connection = None
13
14 def configure(self, host, port, database, user, password):
15 self.host = host
16 self.port = port
17 self.database = database
18 self.user = user
19 self.password = password
20
21 def connect(self):
22 if not all([self.host, self.port, self.database, self.user, self.password]):
23 raise ValueError("Database parameters are not configured.")
24 self.connection = psycopg2.connect(
25 host=self.host,
26 port=self.port,
27 database=self.database,
28 user=self.user,
29 password=self.password
30 )
31
32 def close(self):
33 if self.connection:
34 self.connection.close()
35 self.connection = None
36
37 def __enter__(self):
38 self.connect()
39 return self
40
41 def __exit__(self, exc_type, exc_val, exc_tb):
42 self.close()
43
44 def create_table(self):
45 with self as db:
46 cursor = db.connection.cursor()
47 query = """CREATE TABLE IF NOT EXISTS contacts (
48 id SERIAL PRIMARY KEY,
49 first_name VARCHAR(50),
50 middle_name VARCHAR(50),
51 last_name VARCHAR(50),
52 full_name VARCHAR(100),
53 personal_title VARCHAR(30),
54 nickname VARCHAR(50),
55 email TEXT
56 )"""
57 cursor.execute(query)
58 db.connection.commit()
59
60 def add_contact(
61 self,
62 first_name: str,
63 middle_name: str,
64 last_name: str,
65 full_name: str,
66 personal_title: str,
67 nickname: str,
68 email: str
69 ):
70 try:
71 with self as db:
72 cursor = db.connection.cursor()
73 query = """
74 INSERT INTO contacts (first_name, middle_name, last_name, full_name, personal_title, nickname, email)
75 VALUES (%s, %s, %s, %s, %s, %s, %s)
76 """
77 cursor.execute(query, (first_name, middle_name, last_name, full_name, personal_title, nickname, email))
78 db.connection.commit()
79 except psycopg2.Error as e:
80 print(str(e))
81
82 def update_contact(
83 self,
84 contact_id: int,
85 first_name: str,
86 middle_name: str,
87 last_name: str,
88 full_name: str,
89 personal_title: str,
90 nickname: str,
91 email: str
92 ):
93 with self as db:
94 cursor = db.connection.cursor()
95 query = """
96 UPDATE contacts
97 SET
98 first_name = %s,
99 middle_name = %s,
100 last_name = %s,
101 full_name = %s,
102 personal_title = %s,
103 nickname = %s,
104 email = %s
105 WHERE id = %s
106 """
107 parameters = (first_name, middle_name, last_name, full_name, personal_title, nickname, email, contact_id)
108 cursor.execute(query, parameters)
109 db.connection.commit()
110
111 def delete_contact(self, contact_id):
112 with self as db:
113 cursor = db.connection.cursor()
114 query = "DELETE FROM contacts WHERE id = %s"
115 cursor.execute(query, (contact_id,))
116 db.connection.commit()
117
118 def show_contacts(self):
119 with self as db:
120 cursor = db.connection.cursor()
121 query = "SELECT * FROM contacts"
122 cursor.execute(query)
123 contacts = cursor.fetchall()
124 return contacts