2016-01-08 3 views
2

В настоящее время я пытаюсь заполнить базу данных orientdb graph, используя pyorient. В общем, все работает хорошо. Однако я столкнулся с проблемой синтаксического анализа одной из моих команд. В Python, если я запускаю следующий код:Pyorient batch parsing issue

>>> ab = 'UPDATE Patent SET primary_id = 676, original_abstract = set(original_abstract, "<p num=\\"0000\\">The present invention relates to compounds of the general formula (I) wherein\\n\\nR<sup>1</sup> is the group (A) or (B) or (C) or (D); R<sup>2</sup> is a non aromatic\\n\\nheterocycle, or is OR\' or N(R\\")<sub>2</sub>; R\' is lower alkyl,\\n\\nlower alkyl substituted by halogen or -(CH<sub>2</sub>)<sub>n</sub>-cycloalkyl;\\n\\nR\\" is lower alkyl; R<sup>3</sup> is NO<sub>2</sub>, CN or SO<sub>2</sub>R\';\\n\\nR<sup>4 </sup>is hydrogen, hydroxy, halogen, NO<sub>2</sub>, lower alkyl, lower\\n\\nalkyl, substituted by halogen, lower alkoxy, SO<sub>2</sub>R\' or C(O)OR\\";\\n\\nR<sup>5</sup>/R<sup>6</sup>/R<sup>7</sup> are hydrogen, halogen, lower alkyl\\n\\nor lower alkyl, substituted by halogen; X<sup>1</sup>/X<sup>1\\u00bf</sup>\\n\\nare CH or N, with the proviso that X<sup>1</sup>/X<sup>1\\u00bf</sup> are not simultaneously\\n\\nCH; X<sup>2</sup> is O, S, NH or N(lower alkyl); n is 0, l or 2; and to pharmaceutically\\n\\nactive acid addition salts and to their use in the treatment of neurological and\\n\\nneuropsychiatric disorders.</p>") UPSERT WHERE primary_id = 676' 
>>> client.batch(ab) 

я получаю следующие ошибки:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/shaungupta/anaconda/lib/python2.7/site-packages/pyorient/orient.py", line 402, in batch 
.prepare((QUERY_SCRIPT,) + args).send().fetch_response() 
    File "/Users/shaungupta/anaconda/lib/python2.7/site-packages/pyorient/messages/commands.py", line 145, in fetch_response 
    super(CommandMessage, self).fetch_response() 
    File "/Users/shaungupta/anaconda/lib/python2.7/site-packages/pyorient/messages/base.py", line 256, in fetch_response 
self._decode_all() 
    File "/Users/shaungupta/anaconda/lib/python2.7/site-packages/pyorient/messages/base.py", line 240, in _decode_all 


self._decode_header() 
    File "/Users/shaungupta/anaconda/lib/python2.7/site-packages/pyorient/messages/base.py", line 192, in _decode_header 
    [ exception_message.decode('utf8') ] 
pyorient.exceptions.PyOrientCommandException: com.orientechnologies.orient.core.sql.parser.TokenMgrError - Lexical error at line 1, column 311. Encountered: <EOF> after : "\"<p num=\\\"0000\\\">The present invention relates to compounds of the general formula (I) wherein\\n\\nR<sup>1</sup> is the group (A) or (B) or (C) or (D); R<sup>2</sup> is a non aromatic\\n\\nheterocycle, or is OR\' or N(R\\\")<sub>2</sub>" 

Если я бегу это с помощью команды я получаю сообщение об ошибке:

>>> client.command(ab) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/shaungupta/anaconda/lib/python2.7/site-packages/pyorient/orient.py", line 398, in command 
    .prepare((QUERY_CMD,) + args).send().fetch_response() 
    File "/Users/shaungupta/anaconda/lib/python2.7/site-packages/pyorient/messages/commands.py", line 145, in fetch_response 
    super(CommandMessage, self).fetch_response() 
    File "/Users/shaungupta/anaconda/lib/python2.7/site-packages/pyorient/messages/base.py", line 256, in fetch_response 
    self._decode_all() 
    File "/Users/shaungupta/anaconda/lib/python2.7/site-packages/pyorient/messages/base.py", line 240, in _decode_all 
    self._decode_header() 
    File "/Users/shaungupta/anaconda/lib/python2.7/site-packages/pyorient/messages/base.py", line 192, in _decode_header 
    [ exception_message.decode('utf8') ] 
pyorient.exceptions.PyOrientCommandException: com.orientechnologies.orient.core.sql.OCommandSQLParsingExceptioncom.orientechnologies.orient.core.exception.OSerializationException - Error on parsing command at position #0: Error on reading parameters in: set(original_abstract, "<p num="0000">The present invention relates to compounds of the general formula (I) wherein 

R<sup>1</sup> is the group (A) or (B) or (C) or (D); R<sup>2</sup> is a non aromatic 

heterocycle, or is OR' or N(R")<sub>2</sub>; R' is lower alkyl, 

lower alkyl substituted by halogen or -(CH<sub>2</sub>)<sub>n</sub>-cycloalkyl; 

R" is lower alkyl; R<sup>3</sup> is NO<sub>2</sub>, CN or SO<sub>2</sub>R'; 

R<sup>4 </sup>is hydrogen, hydroxy, halogen, NO<sub>2</sub>, lower alkyl, lower 

alkyl, substituted by halogen, lower alkoxy, SO<sub>2</sub>R' or C(O)OR"; 

R<sup>5</sup>/R<sup>6</sup>/R<sup>7</sup> are hydrogen, halogen, lower alkyl 

or lower alkyl, substituted by halogen; X<sup>1</sup>/X<sup>1¿</sup> 

are CH or N, with the proviso that X<sup>1</sup>/X<sup>1¿</sup> are not simultaneously 

CH; X<sup>2</sup> is O, S, NH or N(lower alkyl); n is 0, l or 2; and to pharmaceutically 

active acid addition salts and to their use in the treatment of neurological and 

neuropsychiatric disordersFound invalid) character at position 229 of text original_abstract, "<p num="0000">The present invention relates to compounds of the general formula (I) wherein 

R<sup>1</sup> is the group (A) or (B) or (C) or (D); R<sup>2</sup> is a non aromatic 

heterocycle, or is OR' or N(R")<sub>2</sub>. Ensure it is opened and closed correctly. 

я нашел однако, если я не добавляю информацию в original_abstract в качестве набора, она работает при использовании команды:

>>> aba = 'UPDATE Patent SET primary_id = 676, original_abstract = "<p num=\\"0000\\">The present invention relates to compounds of the general formula (I) wherein\\n\\nR<sup>1</sup> is the group (A) or (B) or (C) or (D); R<sup>2</sup> is a non aromatic\\n\\nheterocycle, or is OR\' or N(R\\")<sub>2</sub>; R\' is lower alkyl,\\n\\nlower alkyl substituted by halogen or -(CH<sub>2</sub>)<sub>n</sub>-cycloalkyl;\\n\\nR\\" is lower alkyl; R<sup>3</sup> is NO<sub>2</sub>, CN or SO<sub>2</sub>R\';\\n\\nR<sup>4 </sup>is hydrogen, hydroxy, halogen, NO<sub>2</sub>, lower alkyl, lower\\n\\nalkyl, substituted by halogen, lower alkoxy, SO<sub>2</sub>R\' or C(O)OR\\";\\n\\nR<sup>5</sup>/R<sup>6</sup>/R<sup>7</sup> are hydrogen, halogen, lower alkyl\\n\\nor lower alkyl, substituted by halogen; X<sup>1</sup>/X<sup>1\\u00bf</sup>\\n\\nare CH or N, with the proviso that X<sup>1</sup>/X<sup>1\\u00bf</sup> are not simultaneously\\n\\nCH; X<sup>2</sup> is O, S, NH or N(lower alkyl); n is 0, l or 2; and to pharmaceutically\\n\\nactive acid addition salts and to their use in the treatment of neurological and\\n\\nneuropsychiatric disorders.</p>" UPSERT WHERE primary_id = 676' 
>>> client.command(aba) 
['1'] 

Однако client.batch до сих пор не может справиться с этим правильно:

>>> client.batch(aba) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/shaungupta/anaconda/lib/python2.7/site-packages/pyorient/orient.py", line 402, in batch 
    .prepare((QUERY_SCRIPT,) + args).send().fetch_response() 
    File "/Users/shaungupta/anaconda/lib/python2.7/site-packages/pyorient/messages/commands.py", line 145, in fetch_response 
    super(CommandMessage, self).fetch_response() 
    File "/Users/shaungupta/anaconda/lib/python2.7/site-packages/pyorient/messages/base.py", line 256, in fetch_response 
    self._decode_all() 
    File "/Users/shaungupta/anaconda/lib/python2.7/site-packages/pyorient/messages/base.py", line 240, in _decode_all 
    self._decode_header() 
    File "/Users/shaungupta/anaconda/lib/python2.7/site-packages/pyorient/messages/base.py", line 192, in _decode_header 
    [ exception_message.decode('utf8') ] 
pyorient.exceptions.PyOrientCommandException: com.orientechnologies.orient.core.exception.OSerializationException - Found invalid) character at position 274 of text UPDATE Patent SET primary_id = 676, original_abstract = "<p num=\"0000\">The present invention relates to compounds of the general formula (I) wherein\n\nR<sup>1</sup> is the group (A) or (B) or (C) or (D); R<sup>2</sup> is a non aromatic\n\nheterocycle, or is OR' or N(R\")<sub>2</sub>; R' is lower alkyl,\n\nlower alkyl substituted by halogen or -(CH<sub>2</sub>)<sub>n</sub>-cycloalkyl;\n\nR\" is lower alkyl; R<sup>3</sup> is NO<sub>2</sub>, CN or SO<sub>2</sub>R';\n\nR<sup>4 </sup>is hydrogen, hydroxy, halogen, NO<sub>2</sub>, lower alkyl, lower\n\nalkyl, substituted by halogen, lower alkoxy, SO<sub>2</sub>R' or C(O)OR\";\n\nR<sup>5</sup>/R<sup>6</sup>/R<sup>7</sup> are hydrogen, halogen, lower alkyl\n\nor lower alkyl, substituted by halogen; X<sup>1</sup>/X<sup>1\u00bf</sup>\n\nare CH or N, with the proviso that X<sup>1</sup>/X<sup>1\u00bf</sup> are not simultaneously\n\nCH; X<sup>2</sup> is O, S, NH or N(lower alkyl); n is 0, l or 2; and to pharmaceutically\n\nactive acid addition salts and to their use in the treatment of neurological and\n\nneuropsychiatric disorders.</p>" UPSERT WHERE primary_id = 676. Ensure it is opened and closed correctly. 

Запуск строки аЬ непосредственно в консоли orientdb также дает те же ошибки, однако работает строка аба в консоли orientdb работает отлично, так что я не могу понять почему aba не работает с командой porient batch (мне также удалось запустить aba в консоли orientdb как часть транзакции begin/commit с успехом).

Кто-нибудь понимает, почему эта команда работает через client.command, а не client.batch? Мне нужно, чтобы эта команда выполнялась как часть пакета команд, поэтому вам нужно найти исправление ..... В идеале, я хотел бы иметь команду в строке ab, где я добавляю исходный абстракцию как набор для работы, так как мне нужно отслеживать любую новую информацию для соответствия узлов.

Из того, что я могу видеть это синтаксический ограничение команды исполнителя, но, пожалуйста, скажите мне, если я делаю что-то здесь не так ...

Спасибо !!

ответ

0

Первая ошибка показывает, что у вас есть символ конца файла (EOF) в вашей команде, который может быть не виден, часто бывает, если он скопирован из другого места.