在python中连接SAP HANA
Python是一种简单方便的脚本语言, 在文本处理及网络编程方面有强大的功能. 尤其是在Linux环境下, 因为各种发行版本的Linux都会自带python, 所以使用比较广泛. 对于某些简单的后台批量数据处理任务,如果使用python来访问SAP HANA, 代码量通常比java小得多,并且调试运行也更方便. SAP HANA本身的一些测试任务也是由python来完成的.
SCN上有一篇博客”SAP HANA and Python? Yes Sir! “( http://scn.sap.com/community/developer-center/hana/blog/2012/06/08/sap-hana-and-python-yes-sir)介绍了在windows环境下使用python访问SAP HANA的一个Demo, Linux平台稍微有些不同, 本文介绍在Linux环境下如何使用python来访问SAP HANA.
一 环境的配置
首先需要SAP HANA在Linux环境下的客户端(SAP_HANA_CLIENT), 下载解压缩之后的文件列表如下:
执行./hdbinst 按提示安装客户端.
默认安装路径/usr/sap/hdbclient.
安装之后的文件列表如下:
安装完毕之后,会发现存在一个Python文件夹. 这是SAP HANA CLIENT自带的Python. 自带的这个Python现在也是无法连接SAP HANA的, 还需要拷贝几个文件. 将hdbcli目录下的dbapi.py, __init__.py, resultrow.py三个文件拷贝到/usr/sap/hdbclient/Python/lib/python2.6目录下,同时把pyhdbcli.so这个文件也拷贝到/usr/sap/hdbclient/Python/lib/python2.6目录下.
然后执行hdbclient自带的Python(/usr/sap/hdbclient/Python/bin/python)
一般来说只要import dbapi的时候不报错, 环境就配置好了. 不过每次都需要用hdbclient自带的Python似乎有点麻烦, 因为Linux一般自带了python的, 能否让二者集成到一起呢, 使用Linux系统自带的Python连接SAP HANA, 听起来比较cool. 根据上面的过程启发, 要让Python连接HANA实际上关键的就是那四个文件, 关键是把这四个文件拷贝到Linux系统自带Python的什么地方去? 理清楚这个关系, 后面对于新主机访问SAP HANA就不再需要安装hdbclient, 在需要的地方,拷贝这四个文件过去就行了.
执行whereis python查找python的位置(测试环境SUSE Linux 11 x86_64 sp2)
python: /usr/bin/python2.6 /usr/bin/python /usr/lib64/python2.6 /usr/lib64/python /usr/bin/X11/python2.6 /usr/bin/X11/python /usr/local/bin/python /usr/local/bin/python2.7-config /usr/local/bin/python2.7 /usr/local/lib/python2.7 /usr/include/python2.6 /usr/share/man/man1/python.1.gz
会发现python相关的路径有很多个,究竟把’pyhdbcli.so’等文件放到哪个地方取决于python所使用的库文件路径.
在笔者的机器上, 经尝试发现把dbapi.py, __init__.py, resultrow.py, pyhdbcli.so这四个文件全部拷贝到/usr/local/lib/python2.7 路径下,然后Linux系统自带的python同样可以连接到SAP HANA, 这样就不需要再次装hdbclient了, 不过这跟Linux发行版与python的版本有一定的关系. hdbclient中带了一个Python当然是希望用户用hdbclient中的Python, 本Blog中介绍的方法是笔者自己试出来的,是否需要使用, 读者自行斟酌.
二 代码示例
#import the database connect api
import dbapi
#argument
serverAdress='<your IP>'
serverPort=<port>
userName='<username>'
passWord='<password>'
#connect to hana database
conn=dbapi.connect(serverAdress,serverPort,userName,passWord)
#query
query="select idno,name FROM WEIYY_TEST.PTAB1"
cursor=conn.cursor()
try:
ret=cursor.execute(query)
ret=cursor.fetchall()
for row in ret:
for col in row:
print col,
print
except Exception,ex:
print ex
#insert data
query="insert into WEIYY_TEST.PTAB1(IDNO,NAME) values('111','hello,world')"
try:
ret=cursor.execute(query)
except Exception,ex:
print ex
#close connection and cursor
conn.close()
cursor.close()
以上代码首先查寻数据表,然后插入一条新记录,结果如下图所示:
当我们再次执行的时候,结果如下:
显示出之前插入的数据了,在异常处理中显示出一个主键冲突的错误.
可以看出,使用python连接访问SAP HANA是非常方便, 几行代码就可以完成数据库相关的操作.
[本文的测试案例所使用的SAP HANA版本为SAP HANA SPS7 Revision 70.00]
想获取更多SAP HANA学习资料或有任何疑问,请关注新浪微博@HANAGeek!我们欢迎你的加入!
转载本文章请注明作者和出处http://scn.sap.com/community/chinese/hana/blog/2014/04/02/%E5%9C%A8python%E4%B8%AD%E8%BF%9E%E6%8E%A5sap-hana,请勿用于任何商业用途。
On SPS08, no need to copy files anymore, you can access HANA with python after installed the HANA server.