db_example_app/main.py
2025-03-16 21:32:50 +03:00

157 lines
5.1 KiB
Python

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())