python链接DB2数据库相关问题(离线安装,pandas链接等)
由于单位内网无法链接网络,所以在安装完anaconda后,只能手动离线安装db2的包:ibm_db
一、离线安装ibm_db:
参考https://blog.csdn.net/somezz/article/details/80745695
主要有一个坑的地方需要注意:
1.在下载ntx64_odbc_cli.zip解压后将clidriver文件夹放入setup.py同级文件夹后,执行setup.py安装后,在spyder中import ibm_db 还是会报错ImportError: DLL load failed: 找不到指定的模块
解决办法:setup.py执行完成后安装目录下会新生成一个ibm_db-3.0.1.egg-info文件夹,把上一步解压的clidriver放入这个文件夹即可;亲测成功;
二、使用pandas读取DB2数据
这时你按照网上的教程,import ibm_db 后建立connect,兴致勃勃的sql=’…’
然后df=pd.read_sql(sql,conn)时会发现报错has no attribuute ‘cursor’ 这个ibm_db链接不能创建pandas所需要的游标。
原因:个人理解可能是pandas使用的conn链接可能需要支持python的DB-API规范,而ibm_db创建的connect并不支持导致出错(小白理解,有错误请指出)
解决办法1:在你安装完ibm_db包后,其实附带另一个支持pandas读取数据的方法,那就是ibm_db_dbi,只需import ibm_db_dbi,即可实现pandas读取db2数据返回dataframe数据
import ibm_db_dbi
import pandas as pd
conn = ibm_db_dbi.connect("database=***;hostname=你的数据库ip地址;port=端口号;protocol=通信协议(tcp/ip);UID=用户;PWD=密码","","")
sql = """select * from a_table"""
df = pd.read_sql(sql,conn)
解决方法2:使用ibm_db_sa+SQLAlchemy
前提:需要安装ibm_db_sa
from SQLAlchemy import create_engine
import ibm_db_sa
import pandas as pd
e = create_engine("db2+ibm_db://user:pass@host[:port]/database")
df = pd.read_sql(sql,create_engine)