2017-10-15 7 views
0

J'ai le code Python suivant [pyhdb] pour me connecter à SAP Hana Express: Y a-t-il une erreur dans mon code? ou a-t-il quelque chose à voir avec l'utilisateur du SYSTÈME?Comment se connecter à SAP Hana Express avec PyHDB

Message d'erreur est: Impossible de trouver la table/vue Tableau dans le schéma APP: ligne 1 col 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() 

Et voici le code constant:

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

Ceci est un problème de base de données: la question est, le schéma APP contient-il une table ou une vue nommée TABLE, et si c'est le cas, SAP_USER est-il autorisé à l'afficher? – snakecharmerb

+0

comment vérifier si l'utilisateur est autorisé à le voir? – fiberhead

Répondre

2

le message d'erreur

Impossible de trouver la table TABLE/vue dans le schéma APP

indique que la table n'existe pas. Afin de vérifier si la table est connue du système que vous pourriez, par exemple, exécutez également l'instruction SQL

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

qui conduirait à un jeu de résultats vide pour une table non-existante.

Dans le cas d'un problème d'autorisation, vous pouvez plutôt attendre à une erreur comme

privilège insuffisant: Non autorisé

En ce qui concerne la question sur la vérification de l'autorisation, vous voudrez peut-être jeter un coup d'oeil dans les vues système EFFECTIVE_PRIVILEGES, EFFECTIVE_ROLES resp. GRANTED_PRIVILEGES et GRANTED_ROLES (reportez-vous au Guide de sécurité SAP HANA). Généralement, un privilège peut être accordé par un utilisateur ou un rôle. Les rôles peuvent contenir d'autres rôles, ce qui peut rendre la recherche de l'autorisation un peu plus complexe.

Cependant, dans votre cas, vous pourriez probablement essayer la requête SQL assez simple: (. En fonction de votre scénario, vous pouvez également vérifier le privilège UPDATE)

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

S'il vous plaît permettez-moi d'ajouter la remarque que votre déclaration INSERT de l'exemple doit probablement être explicitement validée pour être efficace, comme par défaut les ensembles de connexion autocommit=False, si je me souviens bien.

0

L'utilisateur SYSTEM n'avait pas assez de privilèges pour insérer dans la table. Résolu Merci à tout le monde.