Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trapping MySQL Warnings In Python

Tags:

python

mysql

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.

like image 623
chernevik Avatar asked Mar 15 '09 13:03

chernevik


1 Answers

Follow these steps.

  1. Run it with except Exception, e: print repr(e).

  2. See what exception you get.

  3. Change the Exception to 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.

like image 169
S.Lott Avatar answered Sep 21 '22 02:09

S.Lott