Python Hana DB 驱动
Python 终于在 Hana 平台上成为一等公民了,可以轻松访问 Hana 数据库。安装 SAP Hana Client 之后,安装目录 hdbclient\hdbcli
下面有三个文件。按照 在python中连接SAP HANA | SAP Blogs 这篇文章的提示,解决 Python 连接 Hana 的驱动问题。
但经在网上搜索,我发现另外一个客户端驱动 PyHDB,貌似也是 SAP 发布的,可以在 Python 3.4 上使用。API 符合 PEP-249
规范。本文基于 PyHDB API。
安装
pip install pyhdb
获取 Connection 对象
需要 host, port, user, password 四个参数。注意端口是 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 数据库上有一 EMP_MASTER
的表,这个数据我是从 sample data 获得的。用 Hana Studio 预览数据如下:
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)
程序结果如下 (运行环境是 PyCharm):
参数化查询
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)
这样就获得了所有男性的数据。
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