在HANA上通过Python和JDBC进行数据操作和定义

2020-09-21 22:38发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)具体来说,我想使用Python和...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


具体来说,我想使用Python和/或JDBC在HANA上创建存储过程。

我尝试执行以下简单的DML查询,例如:

更新SYSTEMDB.UNIVERSITY.STUDENT SET SEMESTERS = 6,其中STUDENT_ID = 1 

虽然在从SQL控制台执行上述操作时效果很好,但是从JDBC或Python执行此操作时却收到以下错误:

"功能不受支持:远程数据库对象上不受支持的DML/DDL"

对于定义请求(例如CREATE PROCEDURE),也会发生同样的情况。

这是Python中的一个最小(非)工作示例:

从hdbcli导入dbapi
 导入系统
 连接= dbapi.connect(" 10.11.1.49",39015," SYSTEM"," MyPassword1")
 游标= connection.cursor()
 查询="""
     更新SYSTEMDB.UNIVERSITY.STUDENT SET SEMESTERS = 6其中STUDENT_ID = 1
 ""
 cursor.execute(查询)
 打印(cursor.fetchone())

用户" SYSTEM"对模式" UNIVERSITY"的特权是" CREATE ANY"。

所允许的查询类型是否有限制? 还是我访问表格的方式有问题?

4条回答
宇峰Kouji
2020-09-21 23:09 .采纳回答

你好帕特里克

调查 dbapi.py 我发现python客户端(hdbcli)不支持"数据库"参数。

它支持的参数列表如下:

参数:
     address:数据库实例的IP地址或主机名
     port:数据库实例的端口号
     用户:用户名
     密码:用户名密码
     autocommit:自动提交模式
     包大小:通信包大小
     userkey:用户存储密钥
     properties:具有特殊属性的其他dict对象
 

您当然可以立即自己找出租户数据库的端口,但是我建议使用其他方法。

使用hdbuserstore设置连接信息,只需在连接参数中引用用户密钥(在JDBC和hdbcli/Python中都是如此)。 例如,我的用户密钥称为hxedev,它指向HXE数据库:

 c:\ Program Files \ SAP \ hdbclient> hdbuserstore列表hxedev
 KEY HXEDEV
   ENV:hxehost:39013
   使用者:devdude
   数据库:HXE
 

在Python代码中,我可以编写:

从hdbcli导入dbapi中的
>>>
 >>> conn = dbapi.connect(key =" HXEDEV")
 >>>光标= conn.cursor()
 >>> cursor.execute('SELECT current_time FROM DUMMY')
 真正
 >>>对于光标中的行:
 ...打印(行)
 ...
 (datetime.time(4,6,22),)
 

使用JDBC,我可以编写:

 connection = DriverManager.getConnection(" jdbc:sap://?key = HXEDEV"); 

仅此而已。 源代码中没有登录数据。

希望有帮助(顺便说一句:它也适用于ODBC连接)。

Lars

一周热门 更多>