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
with closing(conn.cursor()) as cur:
                for i, row in enumerate(rows, 1):
                    lst = []
                    for cell in row:
                        lst.append(self._serialize_cell(cell, conn))
                    values = tuple(lst)
                    sql = self._generate_insert_sql(table, values, target_fields, replace, **kwargs)
                    cur.execute(sql, values)
                    if commit_every and i % commit_every == 0:
                        conn.commit()
                        self.log.info("Loaded %s rows into %s so far", i, table)
            conn.commit()
        self.log.info("Done loading. Loaded a total of %s rows", i)
    @staticmethod
    def _serialize_cell(cell, conn=None):  
        """
        Returns the SQL literal of the cell as a string.
        :param cell: The cell to insert into the table
        :type cell: object
        :param conn: The database connection
        :type conn: connection object
        :return: The serialized cell
        :rtype: str
        """
        if cell is None:
            return None
        if isinstance(cell, datetime):
            return cell.isoformat()
        return str(cell)
    def bulk_dump(self, table, tmp_file):