1fanwang opened a new pull request, #71251:
URL: https://github.com/apache/airflow/pull/71251

   `configure_adapters()` raises a `RuntimeError` telling the user to install
   `mysqlclient` whenever `mysqlclient` is absent — even when PyMySQL is 
installed
   and is the driver named in the connection string. The error is raised inside 
a
   `try` that only catches `ImportError`, so it escapes rather than falling 
through
   to the PyMySQL branch a few lines below, which the surrounding code clearly
   intends as the alternative:
   
   ```python
   try:
       try:
           import MySQLdb.converters
       except ImportError:
           raise RuntimeError("You do not have `mysqlclient` package installed. 
...")
       MySQLdb.converters.conversions[Pendulum] = 
MySQLdb.converters.DateTime2literal
   except ImportError:          # cannot catch the RuntimeError above
       pass
   try:
       import pymysql.converters      # never reached when mysqlclient is 
missing
   ```
   
   The result is that `mysql+pymysql://` fails during `import airflow`, before 
any
   command runs. The docs recommend `mysqlclient` and note it is the only driver
   covered by CI, but they also point users at the SQLAlchemy MySQL dialect 
page if
   they want a different one, so hard-failing on this path is not intended.
   
   Each driver is now configured independently, and the error is raised only 
when
   neither is importable — which is the condition the message actually 
describes.
   
   related: #70235
   
   #70235 fixes a separate PyMySQL failure further along the same path — dynamic
   `PREPARE`/`EXECUTE` SQL inside migration `0017_2_9_2`. That one blocks a
   migration; this one blocks `import airflow` outright, so both are needed 
before
   `mysql+pymysql://` works end to end. The two changes do not overlap.
   
   ### Testing Done
   
   <details><summary>Raw logs</summary>
   
   **Before**, with PyMySQL installed and `mysqlclient` absent:
   
   ```
   $ airflow db migrate
   Traceback (most recent call last):
     File ".../airflow/settings.py", line 665, in configure_adapters
       import MySQLdb.converters
   ModuleNotFoundError: No module named 'MySQLdb'
   
   During handling of the above exception, another exception occurred:
     File ".../airflow/__init__.py", line 79, in <module>
       settings.initialize()
     File ".../airflow/settings.py", line 667, in configure_adapters
       raise RuntimeError(
   RuntimeError: You do not have `mysqlclient` package installed. Please 
install it
   with `pip install mysqlclient` ...
   ```
   
   **After**, same environment, 
`AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=mysql+pymysql://...`:
   
   ```
   [info] Performing upgrade to the metadata database
   [info] Creating Airflow database tables from the ORM
   [info] Running stamp_revision  -> 7a98f1b7dbd3
   [info] Database migration done!
   ```
   
   followed by a real DAG run on that database:
   
   ```
   sum of squares = 55
   DagRun Finished: dag_id=tidb_smoke, run_duration=4.42, state=success
   ```
   
   **With neither driver installed** the error still fires, now naming both 
options.
   
   **Regressions**: `prek` static checks and `mypy-airflow-core` clean.
   
   </details>
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to