Hello,

I have recently noticed that a lot of connections with certain special characters don't work with SqlAlchemy as it requires the passwords to be [urlencoded when they contain special characters](https://stackoverflow.com/questions/1423804/writing-a-connection-string-when-password-contains-special-characters). 

Would there be any impact to changing the code at line 81 to urlencode the password like `urllib.parse.quote_plus(conn.password)` to prevent login failures for special characters? 

https://github.com/apache/airflow/blob/dee304b222d355b03794aa063f39e3ee13997730/airflow/hooks/dbapi_hook.py#L72-L88

I initially caught this issue while using the OdbcHook method found here. https://github.com/apache/airflow/blob/dee304b222d355b03794aa063f39e3ee13997730/airflow/providers/odbc/hooks/odbc.py#L198-L204

Happy to create a feature request, I just want to confirm that this issue makes sense. 


airflow/hooks/dbapi_hook.py
"""
        A generic way to insert a set of tuples into a table,
        a new transaction is created every commit_every rows
        :param table: Name of the target table
        :type table: str
        :param rows: The rows to insert into the table
        :type rows: iterable of tuples
        :param target_fields: The names of the columns to fill in the table
        :type target_fields: iterable of strings
        :param commit_every: The maximum number of rows to insert in one
            transaction. Set to 0 to insert all rows in one transaction.
        :type commit_every: int
        :param replace: Whether to replace instead of insert
        :type replace: bool
        """
        i = 0
        with closing(self.get_conn()) as conn:
            if self.supports_autocommit:
                self.set_autocommit(conn, False)
            conn.commit()