import functools from flask import ( Blueprint, flash, g, redirect, render_template, request, session, url_for ) from flask import Blueprint from flask_restful import Resource, Api, reqparse from .db import get_db class Students(Resource): def get(self): db = get_db() cur = db.cursor() cur.execute("SELECT uid, last_name_val, first_name_val, middle_name_val, discipline_val, mark" " FROM main" " join last_name on main.last_name = last_name_id" " join first_name on main.first_name = first_name_id" " join middle_name on main.middle_name = middle_name_id" " join discipline on main.discipline = discipline_id") students = cur.fetchall() def convert(data): return { 'uid': data[0], 'last_name': data[1], 'first_name': data[2], 'middle_name': data[3], 'discipline': data[4], 'mark': data[5] } students = [convert(student) for student in students] return students def post(self): db = get_db() cur = db.cursor() parser = reqparse.RequestParser() parser.add_argument('last_name') parser.add_argument('first_name') parser.add_argument('middle_name') parser.add_argument('discipline') parser.add_argument('mark') args = parser.parse_args() cur.execute("SELECT uid FROM main ORDER BY uid DESC LIMIT 1") uid = cur.fetchone() if uid is None: uid = 0 else: uid = uid[0] + 1 cur.execute("SELECT last_name_id FROM last_name WHERE last_name_val = %s", (args['last_name'],)) last_name = cur.fetchone() if last_name is None: cur.execute("INSERT INTO last_name (last_name_val) VALUES (%s)", (args['last_name'],)) cur.execute("SELECT last_name_id FROM last_name WHERE last_name_val = %s", (args['last_name'],)) last_name = cur.fetchone() last_name = last_name[0] else: last_name = last_name[0] cur.execute("SELECT first_name_id FROM first_name WHERE first_name_val = %s", (args['first_name'],)) first_name = cur.fetchone() if first_name is None: cur.execute("INSERT INTO first_name (first_name_val) VALUES (%s)", (args['first_name'],)) cur.execute("SELECT first_name_id FROM first_name WHERE first_name_val = %s", (args['first_name'],)) first_name = cur.fetchone() first_name = first_name[0] else: first_name = first_name[0] cur.execute("SELECT middle_name_id FROM middle_name WHERE middle_name_val = %s", (args['middle_name'],)) middle_name = cur.fetchone() if middle_name is None: cur.execute("INSERT INTO middle_name (middle_name_val) VALUES (%s)", (args['middle_name'],)) cur.execute("SELECT middle_name_id FROM middle_name WHERE middle_name_val = %s", (args['middle_name'],)) middle_name = cur.fetchone() middle_name = middle_name[0] else: middle_name = middle_name[0] cur.execute("SELECT discipline_id FROM discipline WHERE discipline_val = %s", (args['discipline'],)) discipline = cur.fetchone() if discipline is None: cur.execute("INSERT INTO discipline (discipline_val) VALUES (%s)", (args['discipline'],)) cur.execute("SELECT discipline_id FROM discipline WHERE discipline_val = %s", (args['discipline'],)) discipline = cur.fetchone() discipline = discipline[0] else: discipline = discipline[0] cur.execute("INSERT INTO main (uid, last_name, first_name, middle_name, discipline, mark)" " VALUES (%s, %s, %s, %s, %s, %s)", (uid, last_name, first_name, middle_name, discipline, args['mark'])) db.commit() return {'uid': uid}, 201 class Student(Resource): def get(self, uid): db = get_db() cur = db.cursor() cur.execute("SELECT uid, last_name_val, first_name_val, middle_name_val, discipline_val, mark" " FROM main" " join last_name on main.last_name = last_name_id" " join first_name on main.first_name = first_name_id" " join middle_name on main.middle_name = middle_name_id" " join discipline on main.discipline = discipline_id" " WHERE uid = %s", (uid,)) student = cur.fetchone() if student is None: return {'message': 'Student not found'}, 404 def convert(data): return { 'uid': data[0], 'last_name': data[1], 'first_name': data[2], 'middle_name': data[3], 'discipline': data[4], 'mark': data[5] } student = convert(student) return student def delete(self, uid): db = get_db() cur = db.cursor() cur.execute("SELECT uid FROM main WHERE uid = %s", (uid,)) student = cur.fetchone() if student is None: return {'message': 'Student not found'}, 404 cur.execute("DELETE FROM main WHERE uid = %s", (uid,)) db.commit() return {'message': 'Student deleted'} def put(self, uid): parser = reqparse.RequestParser() parser.add_argument('last_name') parser.add_argument('first_name') parser.add_argument('middle_name') parser.add_argument('discipline') parser.add_argument('mark') args = parser.parse_args() db = get_db() cur = db.cursor() cur.execute("SELECT uid FROM main WHERE uid = %s", (uid,)) student = cur.fetchone() if student is None: return {'message': 'Student not found'}, 404 if args['last_name'] is not None: cur.execute("SELECT last_name_id FROM last_name WHERE last_name_val = %s", (args['last_name'],)) last_name = cur.fetchone() if last_name is None: cur.execute("INSERT INTO last_name (last_name_val) VALUES (%s)", (args['last_name'],)) cur.execute("SELECT last_name_id FROM last_name WHERE last_name_val = %s", (args['last_name'],)) last_name = cur.fetchone() last_name = last_name[0] else: last_name = last_name[0] cur.execute("UPDATE main SET last_name = %s WHERE uid = %s", (last_name, uid)) if args['first_name'] is not None: cur.execute("SELECT first_name_id FROM first_name WHERE first_name_val = %s", (args['first_name'],)) first_name = cur.fetchone() if first_name is None: cur.execute("INSERT INTO first_name (first_name_val) VALUES (%s)", (args['first_name'],)) cur.execute("SELECT first_name_id FROM first_name WHERE first_name_val = %s", (args['first_name'],)) first_name = cur.fetchone() first_name = first_name[0] else: first_name = first_name[0] cur.execute("UPDATE main SET first_name = %s WHERE uid = %s", (first_name, uid)) if args['middle_name'] is not None: cur.execute("SELECT middle_name_id FROM middle_name WHERE middle_name_val = %s", (args['middle_name'],)) middle_name = cur.fetchone() if middle_name is None: cur.execute("INSERT INTO middle_name (middle_name_val) VALUES (%s)", (args['middle_name'],)) cur.execute("SELECT middle_name_id FROM middle_name WHERE middle_name_val = %s", (args['middle_name'],)) middle_name = cur.fetchone() middle_name = middle_name[0] else: middle_name = middle_name[0] cur.execute("UPDATE main SET middle_name = %s WHERE uid = %s", (middle_name, uid)) if args['discipline'] is not None: cur.execute("SELECT discipline_id FROM discipline WHERE discipline_val = %s", (args['discipline'],)) discipline = cur.fetchone() if discipline is None: cur.execute("INSERT INTO discipline (discipline_val) VALUES (%s)", (args['discipline'],)) cur.execute("SELECT discipline_id FROM discipline WHERE discipline_val = %s", (args['discipline'],)) discipline = cur.fetchone() discipline = discipline[0] else: discipline = discipline[0] cur.execute("UPDATE main SET discipline = %s WHERE uid = %s", (discipline, uid)) if args['mark'] is not None: cur.execute("UPDATE main SET mark = %s WHERE uid = %s", (args['mark'], uid)) db.commit() return {'message': 'Student updated'}