2017-10-15 3 views
0

SAP Hana Express에 연결하기 위해 다음 Python 코드 [pyhdb]가 있습니다 : 코드에 오류가 있습니까? 또는 SYSTEM 사용자와 관련이 있습니까? 스키마 APP 테이블/뷰 표를 찾을 수 없습니다 :PyHDB로 SAP Hana Express에 연결하는 방법

오류 메시지는 라인 1 열 (19)

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() 

를 POS (18) 그리고 여기에 일정한 코드 :

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 또는 TABLE 뷰가 포함되어 있으며, 그렇다면 볼 수있는 SAP_USER 권한이 있습니까? – snakecharmerb

+0

사용자에게보기 권한이 있는지 확인하는 방법은 무엇입니까? – fiberhead

답변

2

오류 메시지

스키마 APP 테이블/뷰 표를 찾을 수 없습니다

,536,

은 테이블이 존재하지 않는다는 사실을 나타냅니다. 테이블이 당신이 할 수 시스템, 예를 들어, 알고 여부를 확인하기 위해, 또한 존재하지 않는 테이블 설정 빈 결과로 이어질 것 SQL 문

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

를 실행합니다. 오히려 기대할 수있는 권한 부여 문제의 경우

이 부족 특권

과 같은 오류 : 인증 확인에 대한 질문에 대해서는

권한이 없습니다, 당신은에보고 싶을 수도 시스템보기는 EFFECTIVE_PRIVILEGES, EFFECTIVE_ROLES resp. GRANTED_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

사용자 SYSTEM은 테이블에 삽입 할 수있는 충분한 권한이 없습니다. 모두에게 감사의 말을 전합니다.

관련 문제