258 lines
12 KiB
Python
258 lines
12 KiB
Python
#
|
|
# "contingent-movement" project;
|
|
# author: gazakbayev.net
|
|
# ver: 1.0
|
|
#
|
|
|
|
import psycopg2
|
|
from debug_data.database_creds import CREDS
|
|
|
|
class Database:
|
|
@staticmethod
|
|
def __connection__():
|
|
return psycopg2.connect(**CREDS)
|
|
@staticmethod
|
|
def initialize():
|
|
conn = Database.__connection__()
|
|
try:
|
|
with conn.cursor() as cur, open("../docs/schema.sql", "r", encoding="utf-8") as f:
|
|
cur.execute(f.read())
|
|
conn.commit()
|
|
print("[Contingent-movement] Initialized database with relations.")
|
|
except Exception as e:
|
|
print(f"[Contingent-movement] [Contingent Movement] Error: {e}")
|
|
conn.rollback()
|
|
finally:
|
|
conn.close()
|
|
|
|
def physicals_write(data: list):
|
|
conn = Database.__connection__()
|
|
try:
|
|
with conn.cursor() as cur:
|
|
cur.execute("""
|
|
INSERT INTO Physicals (passport_no, name, surname, birthday, phone, mail, citizenship, address, access_card, access_level)
|
|
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
|
|
""", data)
|
|
conn.commit()
|
|
except Exception as e:
|
|
conn.rollback()
|
|
print(f"[Contingent Movement] Error inserting into Physicals: {e}")
|
|
finally:
|
|
conn.close()
|
|
|
|
def supervisors_write(data: list):
|
|
conn = Database.__connection__()
|
|
try:
|
|
with conn.cursor() as cur:
|
|
cur.execute("""
|
|
INSERT INTO Supervisors (person, experience, defended_ratio, qualification)
|
|
VALUES (%s, %s, %s, %s)
|
|
""", data)
|
|
conn.commit()
|
|
except Exception as e:
|
|
conn.rollback()
|
|
print(f"[Contingent Movement] Error inserting into Supervisors: {e}")
|
|
finally:
|
|
conn.close()
|
|
|
|
def faculties_write(data: list):
|
|
conn = Database.__connection__()
|
|
try:
|
|
with conn.cursor() as cur:
|
|
cur.execute("""
|
|
INSERT INTO Faculties (name, acronym, head, vice, address)
|
|
VALUES (%s, %s, %s, %s, %s)
|
|
""", data)
|
|
conn.commit()
|
|
except Exception as e:
|
|
conn.rollback()
|
|
print(f"[Contingent Movement] Error inserting into Faculties: {e}")
|
|
finally:
|
|
conn.close()
|
|
|
|
def departments_write(data: list):
|
|
conn = Database.__connection__()
|
|
try:
|
|
with conn.cursor() as cur:
|
|
cur.execute("""
|
|
INSERT INTO Departments (name, acronym, founded, head, vice, secretary, faculty_id)
|
|
VALUES (%s, %s, %s, %s, %s, %s, %s)
|
|
""", data)
|
|
conn.commit()
|
|
except Exception as e:
|
|
conn.rollback()
|
|
print(f"[Contingent Movement] Error inserting into Departments: {e}")
|
|
finally:
|
|
conn.close()
|
|
|
|
def programs_write(data: list):
|
|
conn = Database.__connection__()
|
|
try:
|
|
with conn.cursor() as cur:
|
|
cur.execute("""
|
|
INSERT INTO Programs (specification, degree, name, parent_id)
|
|
VALUES (%s, %s, %s, %s)
|
|
""", data)
|
|
conn.commit()
|
|
except Exception as e:
|
|
conn.rollback()
|
|
print(f"[Contingent Movement] Error inserting into Programs: {e}")
|
|
finally:
|
|
conn.close()
|
|
|
|
def groups_write(data: list):
|
|
conn = Database.__connection__()
|
|
try:
|
|
with conn.cursor() as cur:
|
|
cur.execute("""
|
|
INSERT INTO Groups (group_id, faculty_id, program_id, department_id, study_starts, study_ends)
|
|
VALUES (%s, %s, %s, %s, %s, %s)
|
|
""", data)
|
|
conn.commit()
|
|
except Exception as e:
|
|
conn.rollback()
|
|
print(f"[Contingent Movement] Error inserting into Groups: {e}")
|
|
finally:
|
|
conn.close()
|
|
|
|
def students_write(data: list):
|
|
conn = Database.__connection__()
|
|
try:
|
|
with conn.cursor() as cur:
|
|
# 1. Сначала проверяем существование всех внешних ключей
|
|
cur.execute("""
|
|
SELECT 1 FROM physicals WHERE passport_no = %s
|
|
UNION ALL
|
|
SELECT 1 FROM groups WHERE group_id = %s
|
|
UNION ALL
|
|
SELECT 1 FROM physicals WHERE passport_no = %s OR %s IS NULL
|
|
""", [data[0], data[1], data[2], data[2]])
|
|
|
|
if len(cur.fetchall()) < 2 + (1 if data[2] is not None else 0):
|
|
raise ValueError("Invalid foreign key references")
|
|
|
|
cur.execute("""
|
|
INSERT INTO Students (person, group_id, supervisor, education_form, status)
|
|
VALUES (%s, %s, %s, %s, %s)
|
|
RETURNING id
|
|
""", data)
|
|
|
|
inserted_id = cur.fetchone()[0]
|
|
conn.commit()
|
|
return inserted_id
|
|
|
|
except Exception as e:
|
|
conn.rollback()
|
|
print(f"[Contingent Movement] Error inserting into Students: {e}")
|
|
return None
|
|
finally:
|
|
conn.close()
|
|
|
|
def family_write(data: list):
|
|
conn = Database.__connection__()
|
|
try:
|
|
with conn.cursor() as cur:
|
|
cur.execute("""
|
|
INSERT INTO Family (person, name, surname, kinship, phone, address)
|
|
VALUES (%s, %s, %s, %s, %s, %s)
|
|
""", data)
|
|
conn.commit()
|
|
except Exception as e:
|
|
conn.rollback()
|
|
print(f"[Contingent Movement] Error inserting into Family: {e}")
|
|
finally:
|
|
conn.close()
|
|
|
|
def files_write(data: list):
|
|
conn = Database.__connection__()
|
|
try:
|
|
with conn.cursor() as cur:
|
|
cur.execute("""
|
|
INSERT INTO Files (student_id, name, description, extension, size, path)
|
|
VALUES (%s, %s, %s, %s, %s, %s)
|
|
""", data)
|
|
conn.commit()
|
|
except Exception as e:
|
|
conn.rollback()
|
|
print(f"[Contingent Movement] Error inserting into Files: {e}")
|
|
finally:
|
|
conn.close()
|
|
|
|
def disciplines_write(data: list):
|
|
conn = Database.__connection__()
|
|
try:
|
|
with conn.cursor() as cur:
|
|
cur.execute("""
|
|
INSERT INTO Disciplines (name, department_id, credit_units, academic_hours, general_hours, is_annual)
|
|
VALUES (%s, %s, %s, %s, %s, %s)
|
|
""", data)
|
|
conn.commit()
|
|
except Exception as e:
|
|
conn.rollback()
|
|
print(f"[Contingent Movement] Error inserting into Disciplines: {e}")
|
|
finally:
|
|
conn.close()
|
|
|
|
def statements_write(data: list):
|
|
conn = Database.__connection__()
|
|
try:
|
|
with conn.cursor() as cur:
|
|
cur.execute("""
|
|
INSERT INTO Statements (student_id, discipline_id, examiner, try_no, grade, conducted_at)
|
|
VALUES (%s, %s, %s, %s, %s, %s)
|
|
""", data)
|
|
conn.commit()
|
|
except Exception as e:
|
|
conn.rollback()
|
|
print(f"[Contingent Movement] Error inserting into Statements: {e}")
|
|
finally:
|
|
conn.close()
|
|
|
|
def movement_write(data: list):
|
|
conn = Database.__connection__()
|
|
try:
|
|
with conn.cursor() as cur:
|
|
cur.execute("""
|
|
INSERT INTO Movement (student_id, type, new_group, new_status, issued_at)
|
|
VALUES (%s, %s, %s, %s, %s)
|
|
""", data)
|
|
conn.commit()
|
|
except Exception as e:
|
|
conn.rollback()
|
|
print(f"[Contingent Movement] Error inserting into Movement: {e}")
|
|
finally:
|
|
conn.close()
|
|
|
|
|
|
# /$$$$$$ /$$ /$$ /$$
|
|
# /$$__ $$ | $$ |__/ | $$
|
|
# | $$ \__/ /$$$$$$ /$$$$$$$ /$$$$$$ /$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$
|
|
# | $$ /$$__ $$| $$__ $$|_ $$_/ | $$| $$__ $$ /$$__ $$ /$$__ $$| $$__ $$|_ $$_/
|
|
# | $$ | $$ \ $$| $$ \ $$ | $$ | $$| $$ \ $$| $$ \ $$| $$$$$$$$| $$ \ $$ | $$
|
|
# | $$ $$| $$ | $$| $$ | $$ | $$ /$$| $$| $$ | $$| $$ | $$| $$_____/| $$ | $$ | $$ /$$
|
|
# | $$$$$$/| $$$$$$/| $$ | $$ | $$$$/| $$| $$ | $$| $$$$$$$| $$$$$$$| $$ | $$ | $$$$/
|
|
# \______/ \______/ |__/ |__/ \___/ |__/|__/ |__/ \____ $$ \_______/|__/ |__/ \___/
|
|
# /$$ \ $$
|
|
# | $$$$$$/
|
|
# \______/
|
|
# /$$ /$$ /$$
|
|
# | $$$ /$$$ | $$
|
|
# | $$$$ /$$$$ /$$$$$$ /$$ /$$ /$$$$$$ /$$$$$$/$$$$ /$$$$$$ /$$$$$$$ /$$$$$$
|
|
# | $$ $$/$$ $$ /$$__ $$| $$ /$$//$$__ $$| $$_ $$_ $$ /$$__ $$| $$__ $$|_ $$_/
|
|
# | $$ $$$| $$| $$ \ $$ \ $$/$$/| $$$$$$$$| $$ \ $$ \ $$| $$$$$$$$| $$ \ $$ | $$
|
|
# | $$\ $ | $$| $$ | $$ \ $$$/ | $$_____/| $$ | $$ | $$| $$_____/| $$ | $$ | $$ /$$
|
|
# | $$ \/ | $$| $$$$$$/ \ $/ | $$$$$$$| $$ | $$ | $$| $$$$$$$| $$ | $$ | $$$$/
|
|
# |__/ |__/ \______/ \_/ \_______/|__/ |__/ |__/ \_______/|__/ |__/ \___/
|
|
|
|
# /$$ /$$ /$$ /$$
|
|
# | $$ | $$ | $$ | $$
|
|
# | $$$$$$$ /$$ /$$ /$$$$$$ /$$$$$$ /$$$$$$$$ /$$$$$$ | $$ /$$| $$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$ /$$ /$$ /$$$$$$$ /$$$$$$ /$$$$$$
|
|
# | $$__ $$| $$ | $$ /$$__ $$ |____ $$|____ /$$/ |____ $$| $$ /$$/| $$__ $$ |____ $$| $$ | $$ /$$__ $$| $$ /$$/| $$__ $$ /$$__ $$|_ $$_/
|
|
# | $$ \ $$| $$ | $$ | $$ \ $$ /$$$$$$$ /$$$$/ /$$$$$$$| $$$$$$/ | $$ \ $$ /$$$$$$$| $$ | $$| $$$$$$$$ \ $$/$$/ | $$ \ $$| $$$$$$$$ | $$
|
|
# | $$ | $$| $$ | $$ | $$ | $$ /$$__ $$ /$$__/ /$$__ $$| $$_ $$ | $$ | $$ /$$__ $$| $$ | $$| $$_____/ \ $$$/ | $$ | $$| $$_____/ | $$ /$$
|
|
# | $$$$$$$/| $$$$$$$ | $$$$$$$| $$$$$$$ /$$$$$$$$| $$$$$$$| $$ \ $$| $$$$$$$/| $$$$$$$| $$$$$$$| $$$$$$$ \ $//$$| $$ | $$| $$$$$$$ | $$$$/
|
|
# |_______/ \____ $$ \____ $$ \_______/|________/ \_______/|__/ \__/|_______/ \_______/ \____ $$ \_______/ \_/|__/|__/ |__/ \_______/ \___/
|
|
# /$$ | $$ /$$ \ $$ /$$ | $$
|
|
# | $$$$$$/ | $$$$$$/ | $$$$$$/
|
|
# \______/ \______/ \______/
|