【问题标题】:How to connect to SAP Hana Express with PyHDB如何使用 PyHDB 连接到 SAP Hana Express
【发布时间】:2017-10-15 15:10:20
【问题描述】:

我有以下 Python 代码 [pyhdb] 来连接到 SAP Hana Express: 我的代码有错误吗?还是与SYSTEM用户有关?

错误信息是: 在架构 APP 中找不到表/视图 TABLE:第 1 行第 19 行(在 pos 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'

【问题讨论】:

  • 如何查看用户是否有权限查看?

标签: python sap hana


【解决方案1】:

错误信息

在架构 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 没有足够的权限插入表中。解决了 谢谢大家。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多