在IBM Watson,Microsoft Azure和Cognitive Class上,我已经能够使用sqlalchemy连接到db2数据库。问题是使用kaggle笔记本时我无法连接。由于我想将所有笔记本都安装在kaggle上,因此我想修复此问题。
这是我得到的错误:
SQLAlchemy格式所需的连接信息,例如:
postgresql://用户名:密码@主机名/ dbname或现有连接:
dict_keys([])无法加载插件:sqlalchemy.dialects:ibm_db_sa SQLAlchemy格式所需的连接信息,例如:postgresql:// username:password @ hostname / dbname或现有连接:dict_keys([])
这些是我正在使用的凭据:
%sql ibm_db_sa://user:pswd@dashdb-txn-sbox-yp-dal09-04.services.dal.bluemix.net:50000/BLUDB
已安装相关软件包:
ibm-db 3.0.1
ibm-db-sa 0.3.5
SQLAlchemy 1.3.16
!jupyter --version
jupyter核心:4.6.3
jupyter-notebook:5.5.0
qtconsole:4.7.3
ipython:7.13.0
ipykernel:5.1.1
jupyter客户:6.1.3
jupyter实验室:1.2.10
nbconvert:5.6.1
ipywidgets:7.5.1
nbformat:5.0.6
特质:4.3.3
sys.version
3.7.6 |由conda-forge打包| (默认值,2020年3月23日,23:03:20) [GCC 7.3.0]
%Sql Magic模块:
ipython-sql:0.3.9
pandasql:0.7.3
SQLAlchemy:1.3.16
sqlparse:0.3.1
操作系统详细信息:
Windows 10 Home
1909版
安装在19/12/19
操作系统内部版本18363.836
是的,我可以在Kaggle上的Jupyter笔记本中使用ibm_db.connect()
进行连接,并且可以从那里以及通过控制台运行SQL查询,但是我不知道如何在kaggle之外访问python笔记本,它们在云中。我没有安装python或jupyter笔记本的本地版本。
我尝试了以下操作:
import sqlalchemy`
engine = sqlalchemy.create_engine('ibm_db_sa://user:pswd@dashdb-txn-sbox-yp-dal09-04.services.dal.bluemix.net:50000/BLUDB')
然后出现以下错误:
NoSuchModuleError:无法加载插件:sqlalchemy.dialects:ibm_db_sa
但是已加载sqlalchemy和相关模块(请参见上文。)
操作系统名称:
os.name
返回posix。
有一个“ +”号,但与我用来连接到IBM Watson,Microsoft Azure和认知类的密码相同,没有问题。
!pip show ibm_db
返回以下内容:
名称:ibm-db
版本:3.0.1
摘要:适用于DB2(LUW,zOS,i5)和IDS的Python DBI驱动程序
主页:http://pypi.python.org/pypi/ibm_db/
作者:IBM应用程序开发团队
作者电子邮件:opendev@us.ibm.com
许可证:Apache License 2.0
位置:/opt/conda/lib/python3.7/site-packages
要求:
必填者:ibm-db-sa
!pip show ibm_db_sa
返回以下内容:
名称:ibm-db-sa
版本:0.3.5
摘要:SQLAlchemy对IBM数据服务器的支持
主页:http://pypi.python.org/pypi/ibm_db_sa/
作者:IBM应用程序开发团队
作者电子邮件:opendev@us.ibm.com
许可证:Apache License 2.0
位置:/opt/conda/lib/python3.7/site-packages
要求:ibm-db,sqlalchemy
必填者:
!conda list
的结果包括以下内容:
ibm-db 3.0.1 pypi_0 pypi
ibm-db-sa 0.3.5 pypi_0 pypi
!conda show ibm_db
返回以下内容:
错误:未知命令“ conda”
!conda show ibm_db_sa
返回以下内容:
CommandNotFoundError:没有命令“ conda显示”。
!conda list
包括pyodbc 4.0.30 py37he1b5a44_0 conda-forge
from sqlalchemy.dialects import registry
成功。
registry.register( 'ibm_db_sa', 'ibm_db_sa', 'ibm_db_sa.ibm_db.DB2Dialect_ibm_db')
成功。
但是我仍然无法连接。
所有组件都在云中运行。没有什么是本地的。
作为测试,我能够在kaggle上使用sqlite和简单的内存数据库成功运行sqlalchemy和sql_ext。我使用以下内容创建了一个新的笔记本,并能够在创建示例表和示例数据后运行查询:
%load_ext sql
%sql sqlite://
由于我能够连接到其他笔记本云主机(IBM Watson Studio,Azure,认知类)上的db2,并且能够连接到kaggle上的非db2数据库,因此看来问题出在尝试仅在我使用kaggle上托管的笔记本计算机时仅连接到db2。
在kaggle中使用空白笔记本,我输入以下代码行并得到连接错误:
%load_ext sql
sql扩展名已加载。要重新加载它,请使用: %reload_ext sql
%sql ibm_db_sa://user:pswd@dashdb-txn-sbox-yp-dal09-04.services.dal.bluemix.net:50000/BLUDB
所需的SQLAlchemy格式的连接信息,例如: PostgreSQL://用户名:密码@主机名/数据库名 或现有连接:dict_keys(['sqlite://']) 无法加载插件:sqlalchemy.dialects:ibm_db_sa SQLAlchemy格式所需的连接信息,例如: PostgreSQL://用户名:密码@主机名/数据库名 或现有连接:dict_keys(['sqlite://'])
使用另一个空白笔记本,我输入以下代码行,并且可以成功连接到sqlite内存数据库:
%load_ext sql
sql扩展名已加载。要重新加载它,请使用: %reload_ext sql
%sql sqlite://
“已连接:@无”
然后使用sqlite,可以执行查询。
答案 0 :(得分:0)
这时,当尝试使用sqlalchemy连接到db2数据库时,Kaggle上似乎存在环境问题。在Jupyterlab,IBM Watson,Microsoft Azure和Cognitive Class上本地使用笔记本时,不存在此问题。因此,在这一点上,我认为这个问题已经解决。感谢@mao的所有努力。