Jupyter Notebook数据库连接失败求助:MetaData初始化报错
解决Jupyter Notebook中%sql连接MySQL报错:MetaData.init() got an unexpected keyword argument 'bind'
问题重现
执行魔法命令:
%sql mysql+pymysql://root:botsebontle22@localhost:3306/united_nations
报错信息:
MetaData.init() got an unexpected keyword argument 'bind'
Connection info needed in SQLAlchemy format, example:
postgresql://username:password@hostname/dbname
or an existing connection: dict_keys([])
原因分析
这个错误是SQLAlchemy版本兼容性问题:SQLAlchemy 2.0+ 移除了MetaData类的bind参数,但你当前使用的ipython-sql(即%sql魔法命令依赖的包)版本较旧,仍在调用这个已被移除的参数。
解决方案
以下三种方法任选其一:
- 降低SQLAlchemy版本到1.4.x
在终端/命令行执行:
pip install sqlalchemy==1.4.49
该版本是1.4系列稳定版,与旧版ipython-sql完全兼容。
- 升级ipython-sql到最新版本
新版本的ipython-sql已适配SQLAlchemy 2.0+,执行:
pip install --upgrade ipython-sql
升级后重新尝试原连接命令即可。
- 手动创建SQLAlchemy连接再传入%sql
若不想调整包版本,可手动建立连接后传入魔法命令:
from sqlalchemy import create_engine engine = create_engine("mysql+pymysql://root:botsebontle22@localhost:3306/united_nations") %sql engine
此方法可绕开ipython-sql自动创建连接时的参数问题。
验证方式
完成上述操作后,运行测试查询%sql SELECT 1;,若能正常返回结果则说明问题已解决。
内容的提问来源于stack exchange,提问作者Bontle
相关产品推荐
相关产品推荐

