Python Hana DB 驅動
Python 終于在 Hana 平臺上成為一等公民了,可以輕松訪問 Hana 數(shù)據(jù)庫。安裝 SAP Hana Client 之后,安裝目錄 hdbclient\hdbcli
下面有三個文件。按照 在python中連接SAP HANA | SAP Blogs 這篇文章的提示,解決 Python 連接 Hana 的驅動問題。
但經(jīng)在網(wǎng)上搜索,我發(fā)現(xiàn)另外一個客戶端驅動 PyHDB,貌似也是 SAP 發(fā)布的,可以在 Python 3.4 上使用。API 符合 PEP-249
規(guī)范。本文基于 PyHDB API。
安裝
pip install pyhdb
獲取 Connection 對象
需要 host, port, user, password 四個參數(shù)。注意端口是 3+實例編號+15,比如實例編號為 00,則端口為 30015。
import pyhdb
def get_connection():
conn_obj = pyhdb.connect(
host="192.168.1.100",
port=30015,
user="STONE",
password="pwd"
)
return conn_obj
表查詢
假設 Hana 數(shù)據(jù)庫上有一 EMP_MASTER
的表,這個數(shù)據(jù)我是從 sample data 獲得的。用 Hana Studio 預覽數(shù)據(jù)如下:
def get_employees(conn):
cursor = conn.cursor()
cursor.execute('SELECT * FROM "STONE"."EMP_MASTER"')
employees = cursor.fetchall()
return employees
conn = get_connection()
employees = get_employees(conn)
for employee in employees:
print (employee)
程序結果如下 (運行環(huán)境是 PyCharm):
參數(shù)化查詢
def get_employees_male(conn):
cursor = conn.cursor()
cursor.execute('select * from "STONE"."EMP_MASTER" where "GENDER"=:1', ['Male'])
return cursor.fetchall()
conn = get_connection()
employees = get_employees_male(conn)
for employee in employees:
print (employee)
這樣就獲得了所有男性的數(shù)據(jù)。
CRUD 操作,可以參考 PyHDB,不再贅述。
SqlAlchemy 與 Hana DB
使用 SqlAlchemy 連接 Hana DB,也異常簡單。安裝 sqlalchem-hana
模塊:
pip install sqlalchemy-hana
默認情況下,sqlalchemy-hana 使用 hdbcli 驅動,也就是安裝 SAP Hana Client 默認提供的驅動。也可以使用剛剛介紹的 pyhdb 驅動,下面是一個簡單的測試。主要說明 uri 的寫法:
engine = create_engine('hana+pyhdb://username:password@host:port')
from sqlalchemy import create_engine
engine = create_engine('hana+pyhdb://STONE:pwd@192.168.1.100:30015')
with engine.connect() as conn:
rst = conn.execute('SELECT * FROM STONE.EMP_MASTER')
for row in rst:
print (row)
References
SAP HANA and Python? Yes Sir
在python中連接SAP HANA | SAP Blogs
pyhdb 0.2.3
PyHDB on GitHub
SQLAlchemy dialect for SAP HANA
sqlalchemy-hana 0.2.2