Vous savez qu'une requête a réussi (au moins sur le plan technique - si le résultat est ce que vous attendiez est un autre problème) parce qu'il n'a pas soulevé d'exception. Donc, la réponse est évidente: attraper l'exception et imprimez vos params à partir de là:
myquery = "..."
try:
cursor.execute("myquery", params)
except MySQLdb.MySQLError as e:
# using the logging package would be better
print("query '{}' with params {} failed with {}".format(myquery, params, e))
# let the error propagate if you don't
# know how to/cannot handle it at this point
raise
EDIT: si vous voulez obtenir la dernière requête qui a été exécuté, il n'y a rien qui est officially specified by the db api specs. Pour MySQLdb, il y a une méthode non documentée Connection.literal(args)
encore publique que vous pouvez utiliser avec votre requête et params, à savoir:
sql = myquery % yourdbconnection.literal(params)
print("query '{}' failed with {}".format(sql, e))
FWIW qui est exactement comment la requête exécutée est construite (cf la source de MySQLdb.cursor.execute()
). Maintenant, même s'il est public (non préfixé par _
), il n'est toujours pas documenté, donc il n'y a pas de garantie que cela fonctionnera dans la prochaine version - et bien sûr, il est spécifique à l'implémentation, donc il ne fonctionnera pas avec n'importe quel autre connecteur db-api.
Merci, mais ce n'est pas exactement ce que je voulais dire, j'ai mis à jour ma question. – user3605780
Cf ma réponse mise à jour. –