同一环境下部分Jupyter Notebook无法连接MySQL数据库求助
问题:主Jupyter Notebook无法连接MySQL,但测试Notebook可正常运行
我编写了一个爬虫脚本,用于将网站爬取的数据存储到MySQL数据库表中。此前因配置问题,我将MySQL连接代码复制到单独的Jupyter Notebook中测试,调试后该测试Notebook可正常连接数据库,但将代码整合回主Notebook后,运行脚本却抛出错误。
主Notebook相关代码
# 大量爬虫代码... engine = sqlalchemy.create_engine("mysql+pyodbc://user:password@localhost/DATABASE?" ,echo=False) previous_data = pd.read_sql_table('data', engine.connect())
报错信息
DBAPIError: (pyodbc.Error) ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8w.so' : file not found (0) (SQLDriverConnect)")
测试Notebook可正常运行的代码
engine = sqlalchemy.create_engine("mysql+pyodbc://user:password@localhost/DATABASE?" ,echo=False) previous_data = pd.read_sql_table('data', engine.connect())
驱动文件实际存在(测试Notebook能正常连接即可证明),我已尝试以下操作:
- 重启两个Notebook的内核以避免干扰
- 在另一个Notebook实例化连接前,使用
close()方法终止连接 - 检查所用所有库,确保版本一致
- 运行脚本时保持驱动文件所在目录打开,确认文件未被删除
可能的解决思路
1. 排查两个Notebook的Python环境差异
测试Notebook和主Notebook可能使用了不同的虚拟环境,导致pyodbc或sqlalchemy的安装路径/版本不一致,进而影响驱动的查找逻辑:
- 在两个Notebook中分别执行
import sys; print(sys.executable),对比Python解释器路径是否一致 - 执行
import pyodbc; print(pyodbc.drivers()),确认主Notebook中能找到对应libmyodbc8w.so的驱动(通常是MySQL ODBC 8.0 Unicode Driver)
2. 显式指定驱动路径
在连接字符串中直接指定驱动文件的绝对路径,绕过系统自动查找的差异:
engine = sqlalchemy.create_engine( "mysql+pyodbc://user:password@localhost/DATABASE?driver=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8w.so", echo=False )
3. 检查主Notebook的权限设置
主Notebook运行的用户可能没有读取驱动文件的权限,而测试Notebook的用户拥有权限。可在主Notebook中执行以下命令查看权限:
!ls -l /usr/lib/x86_64-linux-gnu/odbc/libmyodbc8w.so
若当前用户无读权限,可通过chmod命令调整文件权限(需管理员权限)。
4. 核对环境变量配置
unixODBC依赖ODBCINI和ODBCSYSINI环境变量查找配置文件,主Notebook的环境变量可能与测试Notebook不一致:
- 在两个Notebook中分别执行
!echo $ODBCINI和!echo $ODBCSYSINI对比输出 - 若存在差异,可在主Notebook中手动设置环境变量:
import os os.environ['ODBCSYSINI'] = '/etc' # 请根据实际配置路径调整 os.environ['ODBCINI'] = '/etc/odbc.ini'
5. 重新安装相关依赖
若以上方法无效,尝试在主Notebook对应的Python环境中重新安装依赖:
pip uninstall pyodbc -y pip install pyodbc
同时可重新确认MySQL ODBC驱动的安装完整性(虽然测试环境可用,但主环境可能存在文件损坏)。
内容的提问来源于stack exchange,提问作者kalium
相关产品推荐
相关产品推荐

