1. 程式人生 > >在python中連線SAP HANA

在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), 下載解壓縮之後的檔案列表如下:

/wp-content/uploads/2014/04/linuxclient_423400.png

     執行./hdbinst 按提示安裝客戶端.    

     預設安裝路徑/usr/sap/hdbclient.

     安裝之後的檔案列表如下:

/wp-content/uploads/2014/04/installed_423428.png

      安裝完畢之後,會發現存在一個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)

/wp-content/uploads/2014/04/connect_423430.png

 

      一般來說只要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()


 

  以上程式碼首先查尋資料表,然後插入一條新記錄,結果如下圖所示:

 

/wp-content/uploads/2014/04/query_423429.png

當我們再次執行的時候,結果如下:

/wp-content/uploads/2014/04/error_423431.png

顯示出之前插入的資料了,在異常處理中顯示出一個主鍵衝突的錯誤.

可以看出,使用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,請勿用於任何商業用途。