【发布时间】:2020-06-05 00:59:24
【问题描述】:
我已经能够使用 sqlalchemy 为 IBM Watson、Microsoft Azure 和 Cognitive Class 上的笔记本连接到 db2 数据库。问题是我在使用我的 kaggle 笔记本时无法连接。因为我想把我所有的笔记本都放在 kaggle 上,所以我想解决这个问题。
这是我得到的错误:
需要 SQLAlchemy 格式的连接信息,例如:
postgresql://username:password@hostname/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笔记本: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
nb 格式:5.0.6
特质:4.3.3
sys.version
3.7.6 | conda-forge 打包| (默认,2020 年 3 月 23 日,23:03:20) [GCC 7.3.0]
%Sql 魔法模块:
ipython-sql:0.3.9
pandasql:0.7.3
SQLAlchemy:1.3.16
sqlparse: 0.3.1
操作系统详情:
Windows 10 家庭版
1909 版
安装于 2019 年 6 月 12 日
操作系统内部版本 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 和 Cognitive Class 的密码相同。
!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 许可证 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 许可证 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 show”。
!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、Cognitive Class)上的 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://username:password@hostname/dbname 或现有连接:dict_keys(['sqlite://']) 无法加载插件:sqlalchemy.dialects:ibm_db_sa SQLAlchemy 格式所需的连接信息,例如: postgresql://username:password@hostname/dbname 或现有连接:dict_keys(['sqlite://'])
使用另一个空白笔记本,输入这几行代码,就可以成功连接到一个sqlite内存数据库:
%load_ext sql
sql 扩展已经加载。要重新加载它,请使用: %reload_ext sql
%sql sqlite://
'已连接:@None'
使用 sqlite,我可以执行查询。
【问题讨论】:
-
请不要发布文字图片。
-
应该的。我没有看到任何相反的文件。我可以导入 ibm-db 3.0.1、ibm-db-sa 0.3.5,但我似乎无法让它们工作。我能够让 sqlite 与内存数据库一起工作。见帖子。
-
没错。我可以在 kaggle notebook 中使用 ibm_db 访问 db2,但使用 ibm_db_sa 无法访问它。
-
仅供参考。 RHEL 7.8,anaconda 4.8.3,python 3.7.6 with jupyter notebook,
import sqlalchemy和import ibm_db_sa运行成功,%load_ext sql工作,%env DATABASE_URL=ibm_db_sa://user:passwd@host:port/dbname然后%sql select...对我来说都正常工作。这是本地的一切(我知道一切都是基于云的,但我正在努力简化以取得进展)。你能在空白的 kaggle 笔记本上确认你遵循的确切步骤吗? -
查看帖子以获取更新。顺便说一句,IBM 云支持表示这是 kaggle 的问题,因为在尝试连接之前导入失败。
标签: python sqlalchemy db2 kaggle