From 6ffbc739640408abd1eaba1e4cab2343a1567308 Mon Sep 17 00:00:00 2001 From: litoq Date: Sun, 16 Mar 2025 21:32:50 +0300 Subject: [PATCH] initial commit --- .gitignore | 2 + main.py | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+) create mode 100644 .gitignore create mode 100644 main.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1a9aabe --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.venv +.idea \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..158af82 --- /dev/null +++ b/main.py @@ -0,0 +1,157 @@ +import psycopg2 +from psycopg2 import sql +from psycopg2.errors import DuplicateDatabase +from PyQt5.QtWidgets import QApplication, QMainWindow, QGridLayout, QWidget, QTableWidget, QTableWidgetItem, QHeaderView +from PyQt5.QtCore import QSize, Qt + + +def connect(config): + """ Connect to the PostgreSQL database server """ + try: + # connecting to the PostgreSQL server + with psycopg2.connect(**config) as conn: + print('Connected to the PostgreSQL server.') + return conn + except (psycopg2.DatabaseError, Exception) as error: + print(error) + + +def createUsersDB(config): + """ Connect to the PostgreSQL database server """ + try: + # connecting to the PostgreSQL server + conn.autocommit = True + cur = conn.cursor() + cur.execute(sql.SQL("CREATE DATABASE {}").format( + sql.Identifier('university')) + ) + print('db created') + except DuplicateDatabase: + print('db already exists') + pass + + +def createuUiversityDB(config): + """ Connect to the PostgreSQL database server """ + try: + # connecting to the PostgreSQL server + conn.autocommit = True + cur = conn.cursor() + cur.execute(sql.SQL("CREATE DATABASE {}").format( + sql.Identifier('university')) + ) + print('db created') + except DuplicateDatabase: + print('db already exists') + pass + + +def createUsersTable(config): + """ Connect to the PostgreSQL database server """ + try: + # connecting to the PostgreSQL server + conn.autocommit = True + cur = conn.cursor() + cur.execute(sql.SQL("CREATE TABLE IF NOT EXISTS users(id int, name varchar(255), age int)")) + print('table created') + except (psycopg2.DatabaseError, Exception) as error: + print(error) + + +def selectUsers(config): + try: + cur = conn.cursor() + cur.execute(sql.SQL("SELECT * FROM users")) + return cur.fetchall() + except (psycopg2.DatabaseError, Exception) as error: + print(error) + return [] + + +def insertUsersData(config, values): + """ Connect to the PostgreSQL database server """ + try: + conn.autocommit = True + cur = conn.cursor() + + users = selectUsers(conn) + + if len(users) == 0: + args = ','.join(cur.mogrify("(%s,%s,%s)", i).decode('utf-8') + for i in values) + + # executing the sql statement + cur.execute("INSERT INTO users VALUES " + (args)) + print('inserted') + else: + print('already inserted') + print(users) + except (psycopg2.DatabaseError, Exception) as error: + print(error) + + +class MainWindow(QMainWindow): + # Override class constructor + def __init__(self): + # You must call the super class method + QMainWindow.__init__(self) + + self.setMinimumSize(QSize(480, 80)) # Set sizes + self.setWindowTitle("DB example") # Set the window title + central_widget = QWidget(self) # Create a central widget + self.setCentralWidget(central_widget) # Install the central widget + + grid_layout = QGridLayout(self) # Create QGridLayout + central_widget.setLayout(grid_layout) # Set this layout in central widget + + self.table = QTableWidget(self) # Create a table + self.table.setColumnCount(3) # Set three columns + self.table.setRowCount(1) # and one row + self.table.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch) + # Set the table headers + self.table.setHorizontalHeaderLabels(["ID", "Name", "Age"]) + + # Set the tooltips to headings + self.table.horizontalHeaderItem(0).setToolTip("ID ") + self.table.horizontalHeaderItem(1).setToolTip("Name ") + self.table.horizontalHeaderItem(2).setToolTip("Age ") + + # Set the alignment to the headers + self.table.horizontalHeaderItem(0).setTextAlignment(Qt.AlignHCenter) + self.table.horizontalHeaderItem(1).setTextAlignment(Qt.AlignHCenter) + self.table.horizontalHeaderItem(2).setTextAlignment(Qt.AlignHCenter) + + # Do the resize of the columns by content + self.table.resizeColumnsToContents() + + grid_layout.addWidget(self.table, 0, 0) # Adding the table to the grid + + def load_data(self, users_data): + for i, user in enumerate(users_data): + row_number = self.table.rowCount()-1 + if len(users_data) != self.table.rowCount(): + self.table.insertRow(row_number) + self.table.setItem(row_number, 0, QTableWidgetItem(str(user[0]))) + self.table.setItem(row_number, 1, QTableWidgetItem(str(user[1]))) + self.table.setItem(row_number, 2, QTableWidgetItem(str(user[2]))) + + +if __name__ == "__main__": + import sys + + conn = psycopg2.connect("user=postgres password=456") + + createuUiversityDB(conn) + createUsersTable(conn) + + values = [(1, 'Ivan', 15), (2, 'Igor', 22), (3, 'Alex', 16), (4, 'Anna', 40), (5, 'Inna', 30)] + + insertUsersData(conn, values) + + users = selectUsers(conn) + + app = QApplication(sys.argv) + mw = MainWindow() + mw.load_data(users) + mw.show() + sys.exit(app.exec()) \ No newline at end of file