0

これは、pyorient github のクローズされた issue#211 の抜粋です。すでに回答がいくつかあるかもしれませんが、エラーは自明ではなく、pyorient を使用してクラスの存在をテストする例を提供するため、ここに投稿しました。したがって、ここに抜粋があります:

クラスの存在を照会する方法をテストしていたので、ここでGRAPHの例として使用されている動物データベースで遊んでいました

### Create the Vertex Animal
cluster_id = client.command("create class Animal extends V")
print(cluster_id)
### Insert a new value
client.command("insert into Animal set name = 'rat', specie = 'rodent'")

次に、db_name 'Animals' を使用してデータベースを照会すると、次の例外応答を受け取りました (これは、ここで説明されていない他の状況でも発生します)。

PyOrientCommandException:  - 

クラスの存在をテストするための私のクエリ:

sql_query = "SELECT FROM ( SELECT expand( classes ) FROM metadata:schema ) WHERE name = '{}')".format('Animal')
client.query(sql_query)

完全な出力エラー:

---------------------------------------------------------------------------
PyOrientCommandException                  Traceback (most recent call last)
<ipython-input-21-a6b7ac6435cb> in <module>()
----> 1 client.query(sql_query)

/home/jo/anaconda3/envs/aenv/lib/python3.5/site-packages/pyorient/orient.py in query(self, *args)
    417     def query(self, *args):
    418         return self.get_message("CommandMessage") \
--> 419             .prepare(( QUERY_SYNC, ) + args).send().fetch_response()
    420 
    421     def query_async(self, *args):

/home/jo/anaconda3/envs/aenv/lib/python3.5/site-packages/pyorient/messages/commands.py in fetch_response(self)
    142 
    143         # decode header only
--> 144         super( CommandMessage, self ).fetch_response()
    145 
    146         if self._command_type == QUERY_ASYNC:

/home/jo/anaconda3/envs/aenv/lib/python3.5/site-packages/pyorient/messages/base.py in fetch_response(self, *_continue)
    259         # already fetched, get last results as cache info
    260         elif len(self._body) is 0:
--> 261             self._decode_all()
    262             self.dump_streams()
    263         return self._body

/home/jo/anaconda3/envs/aenv/lib/python3.5/site-packages/pyorient/messages/base.py in _decode_all(self)
    243 
    244     def _decode_all(self):
--> 245         self._decode_header()
    246         self._decode_body()
    247 

/home/jo/anaconda3/envs/aenv/lib/python3.5/site-packages/pyorient/messages/base.py in _decode_header(self)
    176             raise PyOrientCommandException(
    177                 exception_class.decode( 'utf8' ),
--> 178                 [ exception_message.decode( 'utf8' ) ]
    179             )
    180 

PyOrientCommandException:  - 

utf8デコードが認識していない「影」文字を取得するようなものですか? Jupyterノートブック、ANACONDA pythonディストリビューション3.5、pyorient v.1.4.9のコードでUbuntu 16.04を実行しています

何か助けはありますか?

4

1 に答える 1

0

余分な括弧 '(' を追加しているクエリでエラーを見つけました

sql_query_with_error = "SELECT FROM ( SELECT expand( classes ) FROM metadata:schema ) WHERE name = '{}')".format('Animal')

正しいバージョン:

sql_query = "SELECT FROM ( SELECT expand( classes ) FROM metadata:schema ) WHERE name = '{}'".format('Animal')

しかし、今はtimeout: timed結果が返されずにアウトになりました。

タイムアウトは、次の使用に関連しているようです。

client.set_session_token(True)

クエリではありません。ノートブックでカーネルを再起動し、スクリプトを再度実行すると、期待どおりの結果が得られました。

result = client.query("SELECT FROM ( SELECT expand( classes ) FROM metadata:schema ) WHERE name = 'Animal'")[0]
result.oRecordData

結果出力:

{'abstract': False,
 'clusterIds': [17, 18, 19, 20],
 'clusterSelection': 'round-robin',
 'customFields': None,
 'defaultClusterId': 17,
 'description': None,
 'name': 'Animal',
 'overSize': 0.0,
 'properties': [],
 'shortName': None,
 'strictMode': False,
 'superClass': 'V',
 'superClasses': ['V']}

したがって、トークンを更新して、より長く持続させる必要があると思います

于 2017-01-11T16:24:02.823 に答える