python pyhdb库操作hana数据库
参考文档
1 安装
$ pip install pyhdb
2 快速上手
如果您无法访问SAP HANA服务器,请访问SAP HANA开发中心并选择其中一个选项来获得您自己的试用SAP HANA服务器。
要在hada实例中使用PyHDB
,请遵循以下指南。
pyhdb
的基本用法对于实现DBAPI 2.0接口(PEP 249)的数据库适配器是通用的。下面的示例显示了使用pyhdb模块是多么容易。
import pyhdb
# 建立连接对象
connection = pyhdb.connect(
host="example.com",
port=30015,
user="user",
password="secret"
)
# 通过连接对象获取游标对象
cursor = connection.cursor()
# 执行sql
cursor.execute("SELECT 'Hello Python World' FROM DUMMY")
# 获取一条数据
cursor.fetchone()
# (u"Hello Python World",)
# 关闭连接对象
connection.close()
-
建立数据库连接-connect
pyhdb
中函数connect
创建一个新的数据库会话并返回一个新的Connection实例。请注意,端口不是您SAP HANA数据库的实例号。SAP HANA的SQL端口由3
15组成,例如默认实例号00的端口为30015。 pyhdb
目前只支持用户和密码认证方式。 -
游标对象-cursor
使用Connection对象的方法cursor创建一个新的cursor对象。该对象能够执行SQL语句,并从数据库中获取结果集的一行或多行。# 通过连接对象获取游标对象 cursor = connection.cursor() # 执行sql 查询 模式和表名 cursor.execute("SELECT SCHEMA_NAME, TABLE_NAME FROM TABLES") # 通过游标 从结果集中获取一条数据 cursor.fetchone() # ('SYS', 'DUMMY') # 通过游标 从结果集中获取指定条数 cursor.fetchmany(3) # 获取3条数据 >> [('SYS', 'DUMMY'), ('SYS', 'PROCEDURE_DATAFLOWS'), ('SYS', 'PROCEDURE_MAPPING')] # 通过游标 从结果集中获取所有数据 cursor.fetchall()
3 操作数据库
执行sql使用execute
方法,该方法执行一句sql;如果要执行多条sql,使用executemany
方法。
pramas = ['110', '1', 'abcd', 'hello world']
sql = """replace "SAPHANADB"."ZIMAGE" (MANDT,ID,FILENAME,VALUE) values (:1,:2,:3,:4) WITH PRIMARY KEY;"""
# 执行一条数据
cursor.execute(sql, parameters=params)
# 执行多条数据时,使用executemany方法
pramas_list = [['110', '1', 'abcd', 'hello world'], ['120', '2', 'abcd', 'hello world']]
cursor.executemany(sql, parameters=pramas_list)
3.1 创建表
使用execute方法,您还可以执行DDL语句,如CREATE TABLE
。
cursor.execute('CREATE TABLE PYHDB_TEST("NAMES" VARCHAR (255) null)')
3.2 插入数据
可以使用INSERT INTO
或DELETE
之类的execute方法执行DML语句。游标属性rowcount包含受最后一条语句影响的行数。
# 插入数据
cursor.execute("INSERT INTO PYHDB_TEST VALUES('Hello Python World')")
# :1 :2 :3 传入的参数顺序
pramas = ['110', '1', 'abcd', 'hello world']
cursor.execute("""insert into "SAPHANADB"."ZIMAGE" (MANDT,ID,FILENAME,VALUE) values (:1,:2,:3,:4);""", parameters=params)
# 受影响的行数
cursor.rowcount # 2
3.3 存在更新,不存在创建
可以使用replace
或upsert
之类的execute方法执行DML语句。游标属性rowcount包含受最后一条语句影响的行数。
# 存在更新,不存在创建
# :1 :2 :3 传入的参数顺序
pramas = ['110', '1', 'abcd', 'hello world']
sql = """replace "SAPHANADB"."ZIMAGE" (MANDT,ID,FILENAME,VALUE) values (:1,:2,:3,:4) WITH PRIMARY KEY;"""
# 执行一条数据 执行多条数据时,使用executemany方法
cursor.execute(sql, parameters=params)
# 受影响的行数
cursor.rowcount # 1
3.4 LOBs
LOB可以通过插入或更新语句写入数据库,LOB数据以字符串或LOB实例的形式提供:
from pyhdb import NClob
...
nclob_data = 'hello world'
nclob = NClob(nclob_data)
cursor.execute('update mynclob set nclob_1=:1, nclob_2=:2 where id=:3', [nclob, nclob_data, myid])
目前,lob只能在数据库中写入128k(一个更新或插入语句中提供的全部数据量)以内的大小。这个约束将在PyHDB的下一个版本中被移除。但是,当从数据库读取LOB数据时,此限制不适用。
标签:cursor,execute,hana,游标,pyhdb,sql,数据库 From: https://www.cnblogs.com/itelephant/p/17452180.html