Exemple #1
0
 def _executeRetry(self, conn, cursor, query):
     if self.debug:
         self.printDebug(conn, query, 'QueryR')
     try:
         return cursor.execute(query)
     except self.module.OperationalError as e:
         raise dberrors.OperationalError(ErrorMessage(e))
     except self.module.IntegrityError as e:
         msg = ErrorMessage(e)
         if e.pgcode == '23505':
             raise dberrors.DuplicateEntryError(msg)
         else:
             raise dberrors.IntegrityError(msg)
     except self.module.InternalError as e:
         raise dberrors.InternalError(ErrorMessage(e))
     except self.module.ProgrammingError as e:
         raise dberrors.ProgrammingError(ErrorMessage(e))
     except self.module.DataError as e:
         raise dberrors.DataError(ErrorMessage(e))
     except self.module.NotSupportedError as e:
         raise dberrors.NotSupportedError(ErrorMessage(e))
     except self.module.DatabaseError as e:
         raise dberrors.DatabaseError(ErrorMessage(e))
     except self.module.InterfaceError as e:
         raise dberrors.InterfaceError(ErrorMessage(e))
     except self.module.Warning as e:
         raise Warning(ErrorMessage(e))
     except self.module.Error as e:
         raise dberrors.Error(ErrorMessage(e))
 def _executeRetry(self, conn, cursor, query):
     if self.debug:
         self.printDebug(conn, query, 'QueryR')
     try:
         return cursor.execute(query)
     except self.module.OperationalError as e:
         raise dberrors.OperationalError(ErrorMessage(e))
     except self.module.IntegrityError as e:
         msg = ErrorMessage(e)
         if msg.startswith('column') and msg.endswith('not unique') \
                 or msg.startswith('UNIQUE constraint failed:'):
             raise dberrors.DuplicateEntryError(msg)
         else:
             raise dberrors.IntegrityError(msg)
     except self.module.InternalError as e:
         raise dberrors.InternalError(ErrorMessage(e))
     except self.module.ProgrammingError as e:
         raise dberrors.ProgrammingError(ErrorMessage(e))
     except self.module.DataError as e:
         raise dberrors.DataError(ErrorMessage(e))
     except self.module.NotSupportedError as e:
         raise dberrors.NotSupportedError(ErrorMessage(e))
     except self.module.DatabaseError as e:
         raise dberrors.DatabaseError(ErrorMessage(e))
     except self.module.InterfaceError as e:
         raise dberrors.InterfaceError(ErrorMessage(e))
     except self.module.Warning as e:
         raise Warning(ErrorMessage(e))
     except self.module.Error as e:
         raise dberrors.Error(ErrorMessage(e))
Exemple #3
0
 def _executeRetry(self, conn, cursor, query):
     if self.debug:
         self.printDebug(conn, query, 'QueryR')
     dbEncoding = self.dbEncoding
     if dbEncoding and not isinstance(query, bytes) and (
             self.driver in ('connector', 'oursql')):
         query = query.encode(dbEncoding, 'surrogateescape')
     # When a server connection is lost and a query is attempted, most of
     # the time the query will raise a SERVER_LOST exception, then at the
     # second attempt to execute it, the mysql lib will reconnect and
     # succeed. However is a few cases, the first attempt raises the
     # SERVER_GONE exception, the second attempt the SERVER_LOST exception
     # and only the third succeeds. Thus the 3 in the loop count.
     # If it doesn't reconnect even after 3 attempts, while the database is
     # up and running, it is because a 5.0.3 (or newer) server is used
     # which no longer permits autoreconnects by default. In that case a
     # reconnect flag must be set when making the connection to indicate
     # that autoreconnecting is desired. In MySQLdb 1.2.2 or newer this is
     # done by calling ping(True) on the connection.
     # PyMySQL needs explicit reconnect
     # each time we detect connection timeout.
     for count in range(3):
         try:
             return cursor.execute(query)
         except self.module.OperationalError as e:
             if e.args[0] in (self.CR_SERVER_GONE_ERROR,
                              self.CR_SERVER_LOST):
                 if count == 2:
                     raise dberrors.OperationalError(ErrorMessage(e))
                 if self.debug:
                     self.printDebug(conn, str(e), 'ERROR')
                 if self.driver.lower() == 'pymysql':
                     self._force_reconnect(conn)
             else:
                 raise dberrors.OperationalError(ErrorMessage(e))
         except self.module.IntegrityError as e:
             msg = ErrorMessage(e)
             if e.args[0] == self.ER_DUP_ENTRY:
                 raise dberrors.DuplicateEntryError(msg)
             else:
                 raise dberrors.IntegrityError(msg)
         except self.module.InternalError as e:
             raise dberrors.InternalError(ErrorMessage(e))
         except self.module.ProgrammingError as e:
             if e.args[0] is not None:
                 raise dberrors.ProgrammingError(ErrorMessage(e))
         except self.module.DataError as e:
             raise dberrors.DataError(ErrorMessage(e))
         except self.module.NotSupportedError as e:
             raise dberrors.NotSupportedError(ErrorMessage(e))
         except self.module.DatabaseError as e:
             raise dberrors.DatabaseError(ErrorMessage(e))
         except self.module.InterfaceError as e:
             raise dberrors.InterfaceError(ErrorMessage(e))
         except self.module.Warning as e:
             raise Warning(ErrorMessage(e))
         except self.module.Error as e:
             raise dberrors.Error(ErrorMessage(e))
 def _executeRetry(self, conn, cursor, query):
     # When a server connection is lost and a query is attempted, most of
     # the time the query will raise a SERVER_LOST exception, then at the
     # second attempt to execute it, the mysql lib will reconnect and
     # succeed. However is a few cases, the first attempt raises the
     # SERVER_GONE exception, the second attempt the SERVER_LOST exception
     # and only the third succeeds. Thus the 3 in the loop count.
     # If it doesn't reconnect even after 3 attempts, while the database is
     # up and running, it is because a 5.0.3 (or newer) server is used
     # which no longer permits autoreconnects by default. In that case a
     # reconnect flag must be set when making the connection to indicate
     # that autoreconnecting is desired. In MySQLdb 1.2.2 or newer this is
     # done by calling ping(True) on the connection.
     for count in range(3):
         try:
             return cursor.execute(query)
         except self.module.OperationalError as e:
             if e.args[0] in (self.module.constants.CR.SERVER_GONE_ERROR,
                              self.module.constants.CR.SERVER_LOST):
                 if count == 2:
                     raise dberrors.OperationalError(ErrorMessage(e))
                 if self.debug:
                     self.printDebug(conn, str(e), 'ERROR')
             else:
                 raise dberrors.OperationalError(ErrorMessage(e))
         except self.module.IntegrityError as e:
             msg = ErrorMessage(e)
             if e.args[0] == self.module.constants.ER.DUP_ENTRY:
                 raise dberrors.DuplicateEntryError(msg)
             else:
                 raise dberrors.IntegrityError(msg)
         except self.module.InternalError as e:
             raise dberrors.InternalError(ErrorMessage(e))
         except self.module.ProgrammingError as e:
             raise dberrors.ProgrammingError(ErrorMessage(e))
         except self.module.DataError as e:
             raise dberrors.DataError(ErrorMessage(e))
         except self.module.NotSupportedError as e:
             raise dberrors.NotSupportedError(ErrorMessage(e))
         except self.module.DatabaseError as e:
             raise dberrors.DatabaseError(ErrorMessage(e))
         except self.module.InterfaceError as e:
             raise dberrors.InterfaceError(ErrorMessage(e))
         except self.module.Warning as e:
             raise Warning(ErrorMessage(e))
         except self.module.Error as e:
             raise dberrors.Error(ErrorMessage(e))
Exemple #5
0
 def _executeRetry(self, conn, cursor, query):
     if self.debug:
         self.printDebug(conn, query, 'QueryR')
     dbEncoding = self.dbEncoding
     if dbEncoding and isinstance(query, bytes) and (
             self.driver == 'pg8000'):
         query = query.decode(dbEncoding)
     try:
         return cursor.execute(query)
     except self.module.OperationalError as e:
         raise dberrors.OperationalError(ErrorMessage(e))
     except self.module.IntegrityError as e:
         msg = ErrorMessage(e)
         if getattr(e, 'code', -1) == '23505' or \
                 getattr(e, 'pgcode', -1) == '23505' or \
                 getattr(e, 'sqlstate', -1) == '23505' or \
                 e.args[0] == '23505':
             raise dberrors.DuplicateEntryError(msg)
         else:
             raise dberrors.IntegrityError(msg)
     except self.module.InternalError as e:
         raise dberrors.InternalError(ErrorMessage(e))
     except self.module.ProgrammingError as e:
         msg = ErrorMessage(e)
         if (
             (len(e.args) > 2) and (e.args[1] == 'ERROR')
             and (e.args[2] == '23505')) \
                 or ((len(e.args) >= 2) and (e.args[1] == '23505')):
             raise dberrors.DuplicateEntryError(msg)
         else:
             raise dberrors.ProgrammingError(msg)
     except self.module.DataError as e:
         raise dberrors.DataError(ErrorMessage(e))
     except self.module.NotSupportedError as e:
         raise dberrors.NotSupportedError(ErrorMessage(e))
     except self.module.DatabaseError as e:
         msg = ErrorMessage(e)
         if 'duplicate key value violates unique constraint' in msg:
             raise dberrors.DuplicateEntryError(msg)
         else:
             raise dberrors.DatabaseError(msg)
     except self.module.InterfaceError as e:
         raise dberrors.InterfaceError(ErrorMessage(e))
     except self.module.Warning as e:
         raise Warning(ErrorMessage(e))
     except self.module.Error as e:
         raise dberrors.Error(ErrorMessage(e))
Exemple #6
0
 def _executeRetry(self, conn, cursor, query):
     if self.debug:
         self.printDebug(conn, query, 'QueryR')
     try:
         return cursor.execute(query)
     except self.module.OperationalError as e:
         raise dberrors.OperationalError(ErrorMessage(e))
     except self.module.IntegrityError as e:
         msg = ErrorMessage(e)
         if getattr(e, 'code', -1) == '23505' or \
                 getattr(e, 'pgcode', -1) == '23505' or \
                 getattr(e, 'sqlstate', -1) == '23505':
             raise dberrors.DuplicateEntryError(msg)
         else:
             raise dberrors.IntegrityError(msg)
     except self.module.InternalError as e:
         raise dberrors.InternalError(ErrorMessage(e))
     except self.module.ProgrammingError as e:
         msg = ErrorMessage(e)
         if (len(e.args) >= 2) and e.args[1] == '23505':
             raise dberrors.DuplicateEntryError(msg)
         else:
             raise dberrors.ProgrammingError(msg)
     except self.module.DataError as e:
         raise dberrors.DataError(ErrorMessage(e))
     except self.module.NotSupportedError as e:
         raise dberrors.NotSupportedError(ErrorMessage(e))
     except self.module.DatabaseError as e:
         msg = ErrorMessage(e)
         if 'duplicate key value violates unique constraint' in msg:
             raise dberrors.DuplicateEntryError(msg)
         else:
             raise dberrors.DatabaseError(msg)
     except self.module.InterfaceError as e:
         raise dberrors.InterfaceError(ErrorMessage(e))
     except self.module.Warning as e:
         raise Warning(ErrorMessage(e))
     except self.module.Error as e:
         raise dberrors.Error(ErrorMessage(e))