2017-10-15 3 views
0

Ich habe den folgenden Python-Code [pyhdb] zur Verbindung mit SAP Hana Express: Gibt es einen Fehler in meinem Code? oder hat es etwas mit dem Benutzer SYSTEM zu tun?So stellen Sie eine Verbindung zu SAP Hana Express mit PyHDB her

Fehlermeldung ist: konnte nicht Tabellen-/View-Tabelle in Schema APP finden: Linie 1 col 19 (an 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() 

Und hier ist der konstante Code:

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

Dies ist ein Datenbankproblem: Die Frage ist, enthält das Schema APP eine Tabelle oder eine Sicht namens TABLE, und wenn ja, ist SAP_USER berechtigt, es anzuzeigen? – snakecharmerb

+0

Wie überprüft man, ob der Benutzer berechtigt ist, es zu sehen? – fiberhead

Antwort

2

die Fehlermeldung

kann nicht Tabellen-/view-Tabelle in Schema APP findet

weist darauf hin, dass die Tabelle nicht existiert. Um herauszufinden, ob die Tabelle mit dem System bekannt ist, zu überprüfen, Sie könnten, zum Beispiel, führt auch die SQL-Anweisung

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

, die auf eine leere Ergebnismenge für eine nicht existierende Tabelle führen würden.

Im Falle einer Genehmigung Problem, das Sie eher ein Fehler wie

unzureichend Privileg erwarten konnte: Nicht

In Bezug auf die Frage über die Überprüfung der Genehmigung autorisiert, möchten Sie vielleicht einen Blick in nehmen die Systemansichten EFFECTIVE_PRIVILEGES, EFFECTIVE_ROLES resp. GRANTED_PRIVILEGES und GRANTED_ROLES (siehe das SAP HANA Security Guide). Im Allgemeinen kann ein Privileg entweder von einem Benutzer oder einer Rolle erteilt werden. Rollen können andere Rollen enthalten, was das Auffinden der Autorisierung etwas komplexer machen könnte.

jedoch in Ihrem speziellen Fall, könnten Sie wahrscheinlich versuchen, die eher einfache SQL-Abfrage: (. Je nach Szenario, wollen Sie vielleicht auch für das UPDATE Privileg überprüfen)

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

Bitte erlauben Sie mir, die Bemerkung hinzuzufügen, dass Ihre INSERT-Anweisung aus dem Beispiel wahrscheinlich explizit als wirksam festgelegt werden muss, da die Verbindung standardmäßig autocommit=False setzt, wenn ich mich richtig erinnere.

0

Der Benutzer SYSTEM hatte nicht genug Berechtigungen, um in Tabelle einzufügen. Gelöst Danke an alle.

Verwandte Themen