cloned from code.mipt.ru
This commit is contained in:
@@ -0,0 +1,257 @@
|
||||
#
|
||||
# "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()
|
||||
|
||||
|
||||
# /$$$$$$ /$$ /$$ /$$
|
||||
# /$$__ $$ | $$ |__/ | $$
|
||||
# | $$ \__/ /$$$$$$ /$$$$$$$ /$$$$$$ /$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$
|
||||
# | $$ /$$__ $$| $$__ $$|_ $$_/ | $$| $$__ $$ /$$__ $$ /$$__ $$| $$__ $$|_ $$_/
|
||||
# | $$ | $$ \ $$| $$ \ $$ | $$ | $$| $$ \ $$| $$ \ $$| $$$$$$$$| $$ \ $$ | $$
|
||||
# | $$ $$| $$ | $$| $$ | $$ | $$ /$$| $$| $$ | $$| $$ | $$| $$_____/| $$ | $$ | $$ /$$
|
||||
# | $$$$$$/| $$$$$$/| $$ | $$ | $$$$/| $$| $$ | $$| $$$$$$$| $$$$$$$| $$ | $$ | $$$$/
|
||||
# \______/ \______/ |__/ |__/ \___/ |__/|__/ |__/ \____ $$ \_______/|__/ |__/ \___/
|
||||
# /$$ \ $$
|
||||
# | $$$$$$/
|
||||
# \______/
|
||||
# /$$ /$$ /$$
|
||||
# | $$$ /$$$ | $$
|
||||
# | $$$$ /$$$$ /$$$$$$ /$$ /$$ /$$$$$$ /$$$$$$/$$$$ /$$$$$$ /$$$$$$$ /$$$$$$
|
||||
# | $$ $$/$$ $$ /$$__ $$| $$ /$$//$$__ $$| $$_ $$_ $$ /$$__ $$| $$__ $$|_ $$_/
|
||||
# | $$ $$$| $$| $$ \ $$ \ $$/$$/| $$$$$$$$| $$ \ $$ \ $$| $$$$$$$$| $$ \ $$ | $$
|
||||
# | $$\ $ | $$| $$ | $$ \ $$$/ | $$_____/| $$ | $$ | $$| $$_____/| $$ | $$ | $$ /$$
|
||||
# | $$ \/ | $$| $$$$$$/ \ $/ | $$$$$$$| $$ | $$ | $$| $$$$$$$| $$ | $$ | $$$$/
|
||||
# |__/ |__/ \______/ \_/ \_______/|__/ |__/ |__/ \_______/|__/ |__/ \___/
|
||||
|
||||
# /$$ /$$ /$$ /$$
|
||||
# | $$ | $$ | $$ | $$
|
||||
# | $$$$$$$ /$$ /$$ /$$$$$$ /$$$$$$ /$$$$$$$$ /$$$$$$ | $$ /$$| $$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$ /$$ /$$ /$$$$$$$ /$$$$$$ /$$$$$$
|
||||
# | $$__ $$| $$ | $$ /$$__ $$ |____ $$|____ /$$/ |____ $$| $$ /$$/| $$__ $$ |____ $$| $$ | $$ /$$__ $$| $$ /$$/| $$__ $$ /$$__ $$|_ $$_/
|
||||
# | $$ \ $$| $$ | $$ | $$ \ $$ /$$$$$$$ /$$$$/ /$$$$$$$| $$$$$$/ | $$ \ $$ /$$$$$$$| $$ | $$| $$$$$$$$ \ $$/$$/ | $$ \ $$| $$$$$$$$ | $$
|
||||
# | $$ | $$| $$ | $$ | $$ | $$ /$$__ $$ /$$__/ /$$__ $$| $$_ $$ | $$ | $$ /$$__ $$| $$ | $$| $$_____/ \ $$$/ | $$ | $$| $$_____/ | $$ /$$
|
||||
# | $$$$$$$/| $$$$$$$ | $$$$$$$| $$$$$$$ /$$$$$$$$| $$$$$$$| $$ \ $$| $$$$$$$/| $$$$$$$| $$$$$$$| $$$$$$$ \ $//$$| $$ | $$| $$$$$$$ | $$$$/
|
||||
# |_______/ \____ $$ \____ $$ \_______/|________/ \_______/|__/ \__/|_______/ \_______/ \____ $$ \_______/ \_/|__/|__/ |__/ \_______/ \___/
|
||||
# /$$ | $$ /$$ \ $$ /$$ | $$
|
||||
# | $$$$$$/ | $$$$$$/ | $$$$$$/
|
||||
# \______/ \______/ \______/
|
||||
Reference in New Issue
Block a user