nodes: 0, module; 1, function_definition; 2, function_name:execute; 3, parameters; 4, block; 5, identifier:self; 6, identifier:sql; 7, list_splat_pattern; 8, dictionary_splat_pattern; 9, expression_statement; 10, try_statement; 11, expression_statement; 12, expression_statement; 13, if_statement; 14, identifier:args; 15, identifier:kwargs; 16, string; 17, block; 18, except_clause; 19, assignment; 20, call; 21, comparison_operator:None == self.cursor.description; 22, block; 23, else_clause; 24, string_content:Run raw SQL on the database, and receive relaxing output.
      This is sort of the foundational method that most of the
      others build on.; 25, expression_statement; 26, attribute; 27, identifier:msg; 28, block; 29, identifier:rows; 30, call; 31, attribute; 32, argument_list; 33, None; 34, attribute; 35, return_statement; 36, block; 37, call; 38, attribute; 39, identifier:InterfaceError; 40, raise_statement; 41, attribute; 42, argument_list; 43, identifier:self; 44, identifier:__commit_if_necessary; 45, identifier:kwargs; 46, attribute; 47, identifier:description; 48, None; 49, expression_statement; 50, expression_statement; 51, return_statement; 52, attribute; 53, argument_list; 54, identifier:self; 55, identifier:sqlite3; 56, call; 57, attribute; 58, identifier:fetchall; 59, identifier:self; 60, identifier:cursor; 61, assignment; 62, assignment; 63, identifier:rawdata; 64, attribute; 65, identifier:execute; 66, identifier:sql; 67, list_splat; 68, attribute; 69, argument_list; 70, identifier:self; 71, identifier:cursor; 72, identifier:colnames; 73, list_comprehension; 74, identifier:rawdata; 75, list_comprehension; 76, identifier:self; 77, identifier:cursor; 78, identifier:args; 79, attribute; 80, identifier:InterfaceError; 81, binary_operator:unicode(msg) + '\nTry converting types or pickling.'; 82, call; 83, for_in_clause; 84, call; 85, for_in_clause; 86, identifier:self; 87, identifier:sqlite3; 88, call; 89, string; 90, attribute; 91, argument_list; 92, identifier:d; 93, attribute; 94, identifier:OrderedDict; 95, argument_list; 96, identifier:row; 97, identifier:rows; 98, identifier:unicode; 99, argument_list; 100, string_content; 101, subscript; 102, identifier:decode; 103, string; 104, attribute; 105, identifier:description; 106, call; 107, identifier:msg; 108, escape_sequence:\n; 109, identifier:d; 110, integer:0; 111, string_content:utf-8; 112, identifier:self; 113, identifier:cursor; 114, identifier:zip; 115, argument_list; 116, identifier:colnames; 117, identifier:row
code: def execute(self, sql, *args, **kwargs):
      '''
      Run raw SQL on the database, and receive relaxing output.
      This is sort of the foundational method that most of the
      others build on.
      '''
      try:
        self.cursor.execute(sql, *args)
      except self.sqlite3.InterfaceError, msg:
        raise self.sqlite3.InterfaceError(unicode(msg) + '\nTry converting types or pickling.')
      rows = self.cursor.fetchall()
  
      self.__commit_if_necessary(kwargs)
  
      if None == self.cursor.description:
        return None
      else:
        colnames = [d[0].decode('utf-8') for d in self.cursor.description]
        rawdata = [OrderedDict(zip(colnames,row)) for row in rows]
        return rawdata