class QueryUtils(object): def __init__(self, logger=None, benchmark=None): self.logger = logger self.benchmark = benchmark if self.benchmark is None and logger: self.benchmark = Benchmark(self.logger) def debug(self, msg): self.logger and self.logger.debug(msg) def start_mark(self, message): self.benchmark and self.benchmark.start_mark(message) def stop_mark(self, ): self.benchmark and self.benchmark.stop_mark() def execute_sql(self, sql, args, close_cursor=True, fetch_row=False): self.debug("execute_sql:%s, args:%s" % (sql, args)) select_result = None if isinstance(args, dict): sql, args = self.replace_sql_parameter(sql, args) args = () self.debug("parsed params:%s, args:%s" % (sql, args)) try: from django.db import connection, transaction self.start_mark("execute_sql") cursor = connection.cursor() # Data modifying operation - commit required cursor.execute(sql, args) transaction.commit_unless_managed() if fetch_row and sql.lower().strip().startswith("select"): rs = RawSQLResult(sql) select_result = rs.fetch_from_cursor(cursor) if close_cursor: cursor.close() self.stop_mark() except Exception, e: if self.logger is not None: self.logger.exception(e) raise e if fetch_row: return select_result else: return cursor
def __init__(self, logger=None, benchmark=None): self.logger = logger self.benchmark = benchmark if self.benchmark is None and logger: self.benchmark = Benchmark(self.logger)