Source code for fundamentals.mysql.readquery

#!/usr/local/bin/python
# encoding: utf-8
"""
*Given a mysql query, read the data from the database and return the results as a list of dictionaries (database rows)*

Author
: David Young
"""

from fundamentals import tools
from builtins import str
import sys
import os

os.environ["TERM"] = "vt100"


[docs] def readquery(sqlQuery, dbConn, log, quiet=False): """Given a mysql query, read the data from the database and return the results as a list of dictionaries (database rows) **Key Arguments** - ``log`` -- the logger. - ``sqlQuery`` -- the MySQL command to execute - ``dbConn`` -- the db connection - ``quiet`` -- ignore mysql warnings and errors and move on. Be careful when setting this to true - damaging errors can easily be missed. Default *False*. **Return** - ``rows`` -- the rows returned by the sql query **Usage** ```python from fundamentals.mysql import readquery rows = readquery( log=log, sqlQuery=sqlQuery, dbConn=dbConn, quiet=False ) ``` """ log.debug("starting the ``readquery`` function") import pymysql import warnings warnings.filterwarnings("error", category=pymysql.Warning) rows = [] log.debug("\nSQLQUERY: %(sqlQuery)s}\n" % locals()) try: cursor = dbConn.cursor(pymysql.cursors.DictCursor) # cursor = dbConn.SScursor(pymysql.cursors.SSDictCursor) except Exception as e: log.error("could not create the database cursor: %s" % (e,)) raise IOError("could not create the database cursor: %s" % (e,)) # EXECUTE THE SQL COMMAND tryAgain = True tries = 1 while tryAgain: tryAgain = False try: cursor.execute(sqlQuery) rows = cursor.fetchall() except pymysql.err.InternalError as e: if tries < 61: tryAgain = True log.warning(f"MySQL error: {e}. Attempt {tries}/60.") tries += 1 else: log.warning(f"MySQL error: {e}. Attempt {tries}/60 failed. ") raise except Exception as e: sqlQuery = sqlQuery[:1000] if quiet == False: log.warning( "MySQL raised an error - read command not executed.\n" + str(e) + "\nHere is the sqlQuery\n\t%(sqlQuery)s" % locals() ) raise e else: log.warning( "MySQL raised an error - read command not executed.\n" + str(e) + "\nHere is the sqlQuery\n\t%(sqlQuery)s" % locals() ) pass # CLOSE THE CURSOR try: cursor.close() except Exception as e: log.warning("could not close the db cursor " + str(e) + "\n") log.debug("completed the ``readquery`` function") return rows