How to test database connectivity in python?

后端 未结 2 1032
一向
一向 2021-01-04 04:44

I am accessing a MySQL database from python via MySQLdb library. I am attempting to test the database connection as shown below.

db = MySQLdb.connect(self.s         


        
相关标签:
2条回答
  • 2021-01-04 05:07

    I could be wrong (or misinterpreting your question :) ), but I believe the a connection-related exception gets thrown on MySQLdb.connect(). With MySQLdb, the exception to catch is MySQLdb.Error. Therefore, I would suggest moving the db setup inside of the try block and catching the proper exception (MySQLdb.Error). Also, as @JohnMee mentions, fetchone() will return None if there are no results, so this should work:

    try:
        db = MySQLdb.connect(self.server, self.user, 
                             self.passwd, self.schema)
        cursor = db.cursor()        
        cursor.execute("SELECT VERSION()")
        results = cursor.fetchone()
        # Check if anything at all is returned
        if results:
            return True
        else:
            return False               
    except MySQLdb.Error:
        print "ERROR IN CONNECTION"
    return False
    

    If you don't care about the connection and are just looking to test the execution of the query, I guess you could leave the connection setup outside the try but include MySQLdb.Error in your exception, perhaps as follows:

    db = MySQLdb.connect(self.server, self.user, 
                         self.passwd, self.schema)
    cursor = db.cursor() 
    
    try:
        cursor.execute("SELECT VERSION()")
        results = cursor.fetchone()
        # Check if anything at all is returned
        if results:
            return True
        else:
            return False               
    except MySQLdb.Error, e:
        print "ERROR %d IN CONNECTION: %s" % (e.args[0], e.args[1])
    return False
    

    This would at least give you a more detailed reason of why it failed.

    0 讨论(0)
  • 2021-01-04 05:15

    Yes. Looks good to me.

    My personal preferences:

    • actually throw an exception if no connection
    • you only need to fetchone, the test for None is superfluous (unless you're keen to enforce a minimum version of the database)
    0 讨论(0)
提交回复
热议问题