JupyterLab使用SQLAlchemy访问MySQL时出现以下错误:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 
 | ---------------------------------------------------------------------------ModuleNotFoundError                       Traceback (most recent call last)
 Cell In[7], line 2
 1 from sqlalchemy import create_engine
 ----> 2 engine = create_engine("mysql://scrat:scrat%40123@127.0.0.1/scrat")
 
 File <string>:2, in create_engine(url, **kwargs)
 
 File ~/frin/python/venvs/jupyter/lib/python3.12/site-packages/sqlalchemy/util/deprecations.py:281, in deprecated_params.<locals>.decorate.<locals>.warned(fn, *args, **kwargs)
 274     if m in kwargs:
 275         _warn_with_version(
 276             messages[m],
 277             versions[m],
 278             version_warnings[m],
 279             stacklevel=3,
 280         )
 --> 281 return fn(*args, **kwargs)
 
 File ~/frin/python/venvs/jupyter/lib/python3.12/site-packages/sqlalchemy/engine/create.py:599, in create_engine(url, **kwargs)
 597         if k in kwargs:
 598             dbapi_args[k] = pop_kwarg(k)
 --> 599     dbapi = dbapi_meth(**dbapi_args)
 601 dialect_args["dbapi"] = dbapi
 603 dialect_args.setdefault("compiler_linting", compiler.NO_LINTING)
 
 File ~/frin/python/venvs/jupyter/lib/python3.12/site-packages/sqlalchemy/dialects/mysql/mysqldb.py:147, in MySQLDialect_mysqldb.import_dbapi(cls)
 145 @classmethod
 146 def import_dbapi(cls):
 --> 147     return __import__("MySQLdb")
 
 ModuleNotFoundError: No module named 'MySQLdb'
 
 | 
这是因为SQLAlchemy连接MySQL默认驱动是MySQLdb,MySQLdb仅支持Python2,不支持Python3。如果使用Python3,可以安装pymysql库,并将连接串改为mysql+pymysql://scrat:scrat%40123@127.0.0.1/scrat就好了。