La manière correcte d'écrire des déclarations préparées est la suivante :
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'erreur vient du fait que le module mysql ne trouve pas où mettre les paramètres que vous lui donnez, car il n'interprète pas les points d'interrogation comme des espaces réservés, et produit donc une erreur vous indiquant que _mysql_exceptions.ProgrammingError: not all arguments converted during string formatting
, ce qui, en langage humain, signifie qu'il ne peut pas contenir vos arguments dans la chaîne de format.