首页 文章

如何使用PyHDB连接到SAP Hana Express

提问于
浏览
0

我有以下Python代码[pyhdb]连接到SAP Hana Express:我的代码中是否有错误?或者它与SYSTEM用户有关系?

错误消息是:无法在架构APP中找到表/视图表:第1行第19行(位于第18位)

import os
import random
import platform
from constant import *
import pyhdb

def is_rpi():
    return 'arm' in platform.uname()[4]

if is_rpi():
    import Adafruit_DHT

def read_dht():
    if is_rpi():
    sensor = Adafruit_DHT.DHT22
    humidity, temperature = Adafruit_DHT.read_retry(sensor, DHT_PIN)

    if humidity is not None and temperature is not None:
        print('Temp={0:0.1f}*C  Humidity={1:0.1f}%'.format(temperature, humidity))
        return int(humidity), int(temperature)
    else:
        return None, None
else:
    return random.randint(20, 30), random.randint(40, 70)

if __name__ == '__main__':

connection = pyhdb.connect(host=SAP_HOST, port=39015, user=SAP_USER, password=SAP_PWD)
cursor = connection.cursor()

temp, humi = read_dht()
query = "INSERT INTO \"{}\".\"{}\" VALUES(\'{}\', {}, {}, \'{}\')".format(
    SAP_SCHEMA, SAP_TABLE, DEVICE_ID, temp, humi, ROOM_NAME)
print("Executing query: "), query
cursor.execute(query)

print("New Row count: "), cursor.rowcount
connection.close()

以下是常量代码:

DHT_PIN = 4
DEVICE_ID = '0ada9de4-bc4f-4e53-990a-cbcfccaed4c4'
ROOM_NAME = 'room 101
SAP_HOST = 'hxehost'
SAP_USER = 'SYSTEM'
SAP_PWD = 'XXXXXXXXXXXX'
SAP_SCHEMA = 'APP'
SAP_TABLE = 'TABLE'

2 回答

  • 0

    错误消息

    无法在架构APP中找到表/视图TABLE

    指出表不存在的事实 . 为了检查系统是否知道该表,您可以例如运行SQL语句

    SELECT * FROM TABLES WHERE SCHEMA_NAME='APP' AND TABLE_NAME='TABLE';

    这将导致不存在的表的空结果集 .

    如果出现授权问题,您可能会发现错误

    权限不足:未经授权

    关于检查授权的问题,您可能需要查看系统视图 EFFECTIVE_PRIVILEGESEFFECTIVE_ROLES resp . GRANTED_PRIVILEGESGRANTED_ROLES (请参阅“SAP HANA安全指南”) . 通常,权限可以由用户或角色授予 . 角色可以包含其他角色,这可能会使查找授权更复杂一些 .

    但是,在您的特定情况下,您可能会尝试相当简单的SQL查询:

    SELECT * FROM "PUBLIC"."EFFECTIVE_PRIVILEGES" 
    WHERE USER_NAME='SYSTEM' AND SCHEMA_NAME='APP' AND PRIVILEGE='INSERT';
    

    (根据您的方案,您可能还需要检查 UPDATE 权限 . )

    请允许我添加注释,示例中的 INSERT 语句可能需要显式提交才能生效,因为默认情况下连接设置 autocommit=False ,如果我没记错的话 .

  • 2

    用户SYSTEM没有足够的权限插入表中 . 解决了感谢大家 .

相关问题