#!"c:\python310\python.exe" # Program url: skipped. # Suggested solution for HW #6, Fall 2025 import cgi import pymysql from dbconfig import get_mysql_param def connect_db(): params = get_mysql_param() return pymysql.connect( host=params['host'], user=params['user'], password=params['password'], database=params['database'] ) def print_response_header(): print("Content-Type: text/html\n") def get_http_param(param): if not hasattr(get_http_param, "params"): get_http_param.params = cgi.FieldStorage() return get_http_param.params.getfirst(param) def display_swimmers_html(connection): with connection.cursor() as cursor: query = ''' WITH o AS (SELECT DISTINCT s.SwimmerId, COUNT(oc.ct_id) AS numOC FROM swim.Swimmer AS s LEFT JOIN swim.OtherCaretaker AS oc ON (s.SwimmerId = oc.SwimmerId) GROUP BY s.SwimmerId), e AS (SELECT DISTINCT s.SwimmerId, COUNT(p.eventId) AS numEvents FROM swim.Swimmer AS s LEFT JOIN swim.Participation AS p ON (s.SwimmerId = p.SwimmerId) GROUP BY s.SwimmerId) SELECT DISTINCT s.swimmerId, CONCAT(s.fName, ' ', s.LName) AS swimmer, CONCAT(c.fName, ' ', c.LName) AS primary_ct, o.numOC, e.numEvents FROM swim.swimmer s LEFT JOIN swim.Caretaker AS c ON (s.Main_CT_Id = c.ct_id) LEFT JOIN o ON (s.swimmerId = o.swimmerId) LEFT JOIN e ON (s.swimmerId = e.swimmerId) ''' cursor.execute(query) print ('''
''') print('| Swimmer (id) | Primary caretaker | Number of other caretakers | Number of events |
| {swimmer} ({sid}) | {primary} | {n_other} | {n_events} |