2017-10-15 12 views
0

SAP Hana Expressに接続するためのPythonコード[pyhdb]があります: 私のコードにエラーがありますか?それともSYSTEMユーザーと何か関係がありますか? は、スキーマAPPにテーブル/ビュー表が見つかりませんでした:PyHDBを使用してSAP Hana Expressに接続する方法

エラーメッセージは、ライン1 COL 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という名前のテーブルまたはビューが含まれていて、表示されている場合は、表示する権限がSAP_USERですか? – snakecharmerb

+0

ユーザーに表示する権限があるかどうかを確認する方法 – fiberhead

答えて

2

エラーメッセージ

スキーマのテーブル/ビューテーブルが見つかりませんでした。APP

は、テーブルが存在しないことを示しています。テーブルがシステムに知られているかどうかをチェックするために、あなたは、例えば、非既存のテーブルに設定された空の結果をもたらすことになるSQL文の

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

を実行することができます。あなたはかなり期待できる認証の問題の場合は

は十分な特権

のようなエラー:許可をチェックに関する質問について

許可されていませんが、あなたがに見てみたい場合がありますシステムビューEFFECTIVE_PRIVILEGESEFFECTIVE_ROLES resp。 GRANTED_PRIVILEGESおよびGRANTED_ROLES(SAP HANAセキュリティガイドを参照)。一般的に、特権はユーザーまたは役割のいずれかによって付与されます。ロールには他のロールを含めることができます。これにより、権限が少し複雑になることがあります。

しかし、あなたの特定のケースでは、おそらくかなり単純なSQLクエリを試みることができる:

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

(自分のシナリオに応じて、あなたもUPDATE権限をチェックすることをお勧めします。)

例からのINSERTステートメントが、実際には有効であることを明示的に要求する必要があるという発言を追加することを許可してください。デフォルトでは、正しく記憶されていれば接続はautocommit=Falseと設定されています。

0

ユーザーSYSTEMは、テーブルに挿入する権限がありませんでした。みんなに感謝しました。

関連する問題