def runInteraction(self, interaction, *args, **kwargs):
        """
        Interact with the database and return the result.

        :param interaction: <function> method with first argument is a <adbapi.Transaction> instance
        :param args: additional positional arguments to be passed to interaction
        :param kwargs: keyword arguments to be passed to interaction
        :return: <defer>
        """
        try:
            return self._connectionPool.runInteraction(
                interaction,
                *args,
                **kwargs
            )
        except:
            d = defer.Deferred()
            d.errback()
            return d