I would like to catch and log MySQL warnings in Python. For example, MySQL issues a warning to standard error if you submit 'DROP DATABASE IF EXISTS database_of_armaments' when no such database exists. I would like to catch this and log it, but even in the try/else syntax the warning message still appears.
The try/except syntax does catch MySQL errors (eg, submission of a typo like 'DRP DATABASE database_of_armaments').
I have experimented with <<except.MySQLdb.Warning>> — no luck. I’ve looked at the warnings module, but don’t understand how to incorporate it into the try/else syntax.
To be concrete, how do I get the following (or something like it) to work.
GIVEN: database ‘database_of_armaments’ does not exist.
try: cursor.execute('DROP DATABASE IF EXISTS database_of_armaments') except: <<WHAT DO I PUT HERE?>> print 'There was a MySQL warning.' <<AND what goes here if I want to get and manipulate information about the warning?>>
UPDATE:
Thanks for the comments. I had tried these and they didn’t work — but I had been using a DatabaseConnection class that I wrote for a connection, and its runQuery() method to execute. When I created a connection and cursor outside the class, the try/except Exception caught the ‘Programming Error’, and except MySQLdb.ProgrammingError worked as advertised.
So now I have to figure out what is wrong with my class coding.
Thank you for your help.
Follow these steps.
Run it with
except Exception, e: print repr(e).See what exception you get.
Change the
Exceptionto the exception you actually got.Also, remember that the exception, e, is an object. You can print
dir(e),e.__class__.__name__, etc.to see what attributes it has.Also, you can do this interactively at the
>>>prompt in Python. You can then manipulate the object directly — no guessing.