def connect(self, reconnect=1): log_debug(1, "Connecting to database", self.dbtxt) self._fix_environment_vars() try: self.dbh = self._connect() except self.OracleError, e: ret = self._get_oracle_error_info(e) if isinstance(ret, types.StringType): raise sql_base.SQLConnectError( self.dbtxt, -1, "Unable to connect to database", ret), None, sys.exc_info()[2] (errno, errmsg) = ret[:2] log_error("Connection attempt failed", errno, errmsg) if reconnect: # we don't try to reconnect blindly. We have a list of # known "good" failure codes that warrant a reconnect # attempt if errno in [12547]: # lost contact return self.connect(reconnect=0) err_args = [self.dbtxt, errno, errmsg] err_args.extend(list(ret[2:])) raise sql_base.SQLConnectError( *err_args), None, sys.exc_info()[2] # else, this is a reconnect attempt raise sql_base.SQLConnectError(*([ self.dbtxt, errno, errmsg, "Attempting Re-Connect to the database failed", ] + ret[2:])), None, sys.exc_info()[2]
def connect(self, reconnect=1): try: dsndata = { 'dbname': self.database, 'user': self.username, 'password': self.password} if self.host is not None: dsndata['host'] = self.host dsndata['port'] = self.port if self.sslmode is not None and self.sslmode == 'verify-full' and self.sslrootcert is not None: dsndata['sslmode'] = self.sslmode dsndata['sslrootcert'] = self.sslrootcert elif self.sslmode is not None: raise AttributeError("Only sslmode=\"verify-full\" (or None) is supported.") if self.sslmode is not None and self.sslrootcert is None: raise AttributeError("Attribute sslrootcert needs to be set if sslmode is set.") self.dbh = psycopg2.connect(" ".join("%s=%s" % (k, re.escape(str(v))) for k, v in dsndata.items())) # convert all DECIMAL types to float (let Python to choose one) DEC2INTFLOAT = psycopg2.extensions.new_type(psycopg2._psycopg.DECIMAL.values, 'DEC2INTFLOAT', decimal2intfloat) psycopg2.extensions.register_type(DEC2INTFLOAT) except psycopg2.Error: e = sys.exc_info()[1] if reconnect > 0: # Try one more time: return self.connect(reconnect=reconnect - 1) # Failed reconnect, time to error out: raise_with_tb(sql_base.SQLConnectError( self.database, e.pgcode, e.pgerror, "All attempts to connect to the database failed"), sys.exc_info()[2])
def connect(self, reconnect=1): log_debug(1, "Connecting to database", self.dbtxt) self._fix_environment_vars() try: self.dbh = self._connect() except self.OracleError: e = sys.exc_info()[1] ret = self._get_oracle_error_info(e) if isinstance(ret, usix.StringType): raise_with_tb( sql_base.SQLConnectError(self.dbtxt, -1, "Unable to connect to database", ret), sys.exc_info()[2]) (errno, errmsg) = ret[:2] log_error("Connection attempt failed", errno, errmsg) if reconnect: # we don't try to reconnect blindly. We have a list of # known "good" failure codes that warrant a reconnect # attempt if errno in [12547]: # lost contact return self.connect(reconnect=0) err_args = [self.dbtxt, errno, errmsg] err_args.extend(list(ret[2:])) raise_with_tb(sql_base.SQLConnectError(*err_args), sys.exc_info()[2]) # else, this is a reconnect attempt raise sql_base.SQLConnectError(*([ self.dbtxt, errno, errmsg, "Attempting Re-Connect to the database failed", ] + ret[2:])).with_traceback(sys.exc_info()[2]) dbh_id = id(self.dbh) # Reset the statement cache for this database connection self._cursor_class._cursor_cache[dbh_id] = {}