Il modo corretto di scrivere le dichiarazioni preparate è il seguente:
def create_student(surname, forename, dob, address, phone, gender, tutor, email):
cursor = mysql.connection.cursor()
cursor.execute('''
INSERT INTO students(surname, forename, dob, address, phone, gender, tutor, email)
VALUES(%s, %s, %s, %s, %s, %s, %s, %s)''', (surname, forename, dob, address, phone, gender, tutor, email))
mysql.connection.commit()
L'errore deriva dal fatto che il modulo mysql non trova dove inserire i parametri che gli stai dando, perché non interpreta i punti interrogativi come segnaposto e quindi produce un errore che ti dice che _mysql_exceptions.ProgrammingError: not all arguments converted during string formatting
, che nel linguaggio umano significa che non può contenere i tuoi aguments nella stringa di formato.