将IBM_DB与Pandas一起使用

Sha*_*uri 4 python db2 pandas

我试图在Python语言中使用数据分析工具Pandas.我正在尝试使用ibm_db包从IBM DB读取数据.根据Pandas网站上的文档,我们需要提供至少2个参数,一个是将要执行的sql,另一个是数据库的连接对象.但是当我这样做时,它给出了错误,即连接对象中没有cursor()方法.我想也许这不是这个特定的数据库包的工作方式.我试图找到一些解决方法,但没有成功.

码:

print "hello PyDev"
con = db.connect("DATABASE=db;HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;UID=admin;PWD=admin;", "", "")
sql = "select * from Maximo.PLUSPCUSTOMER"
stmt = db.exec_immediate(con,sql)
pd.read_sql(sql, db)
print "done here"
Run Code Online (Sandbox Code Playgroud)

错误:

hello PyDev
Traceback (most recent call last):
  File "C:\Users\ray\workspace\Firstproject\pack\test.py", line 15, in <module>
    pd.read_sql(sql, con)
  File "D:\etl\lib\site-packages\pandas\io\sql.py", line 478, in read_sql
    chunksize=chunksize)
  File "D:\etl\lib\site-packages\pandas\io\sql.py", line 1504, in read_query
    cursor = self.execute(*args)
  File "D:\etl\lib\site-packages\pandas\io\sql.py", line 1467, in execute
    cur = self.con.cursor()
AttributeError: 'ibm_db.IBM_DBConnection' object has no attribute 'cursor'
Run Code Online (Sandbox Code Playgroud)

如果我从数据库中获取数据,我能够获取数据,但我需要读入数据帧,并需要在处理数据后写回数据库.

从DB获取的代码

stmt = db.exec_immediate(con,sql)
 tpl=db.fetch_tuple(stmt)
 while tpl:
     print(tpl)
     tpl=db.fetch_tuple(stmt)
Run Code Online (Sandbox Code Playgroud)

Sha*_*uri 11

在进一步研究包时,我发现我需要将IBM_DB连接对象包装在ibm_db_dbi连接对象中,该连接对象是同一个包的一部分.

所以

conn = ibm_db_dbi.Connection(con)
df = pd.read_sql(sql, conn)
Run Code Online (Sandbox Code Playgroud)

上面的代码工作,pandas成功地将数据提取到数据帧.

  • 确保“导入 ibm_db_dbi” (2认同)