2017-10-15 47 views
0

我有以下Python代碼[pyhdb]連接到SAP Hana Express: 我的代碼中是否有錯誤?或者它與SYSTEM用戶有關係嗎?如何使用PyHDB連接到SAP Hana Express

錯誤消息是: 無法在架構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' 
+0

這是一個數據庫問題:問題是,模式APP是否包含名爲TABLE的表或視圖,如果是,SAP_USER是否有權查看它? – snakecharmerb

+0

如何檢查用戶是否有權查看它? – fiberhead

回答

2

錯誤消息

在架構APP中找不到表/視圖APP

指出該表不存在的事實。爲了檢查表是否是已知的系統你可以,例如,同時運行SQL語句

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

這將導致對一個不存在的表中設置一個空的結果。

在授權問題的情況下,你可能還是期待像

特權不足的錯誤:未授權

對於有關檢查權限的問題,你可能想看看進入系統視圖分別爲EFFECTIVE_PRIVILEGESEFFECTIVE_ROLESGRANTED_PRIVILEGESGRANTED_ROLES(請參閱SAP HANA安全指南)。通常,可以由用戶或角色授予權限。角色可以包含其他角色,這可能會使授權更加複雜。

然而,在特定情況下,你也許可以嘗試的,而簡單的SQL查詢:(根據您的情況,您可能還需要檢查是否有UPDATE特權)

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

請允許我添加這樣一句話:示例中的INSERT聲明可能需要明確承諾有效,因爲默認情況下,如果我沒有記錯,連接將設置爲autocommit=False

0

用戶系統沒有足夠的權限插入到表中。解決感謝大家。