Ошибка шифрованного запроса py2neo: neo4j.SyntaxException

Я пытаюсь выполнить простой параметризованный шифрованный запрос, который на самом деле терпит неудачу из-за синтаксической ошибки.

params = {
   "k" : k,
   "v" : v,
   "p": {
      "name": "marc"
   }
}

query = "CYPHER 2.0 MATCH (n { { k } : { v } }) SET { p } RETURN n"
data, metadata = cypher.execute(graph_db, query, params=params)

...

SyntaxException: Invalid input '{': expected whitespace, comment, an identifier, '}' or UnsignedInteger (line 1, column 12)
"MATCH (n { { k } : { v } }) SET { p } RETURN n"

Я использую py2neo 1.6.3 с колбой.

Заранее спасибо!

/Марк


person mwienhold    schedule 11.03.2014    source источник


Ответы (1)


Параметры разрешены только в определенных местах. Попробуйте следующее утверждение:

MATCH (n { k : { valueParam } }) SET { n.name = { nameParam } } RETURN n

Ваша карта будет содержать:

params = {
   "valueParam " : "v",
   "nameParam " : "marc"
}

Чтобы указать документацию по шифру:

Нельзя использовать параметры как для имен свойств, типов отношений и меток, так как эти шаблоны являются частью структуры запроса, которая компилируется в план запроса.

person tstorms    schedule 11.03.2014
comment
Хм. Спасибо. Это сработало, но не удовлетворяет мои потребности. Документы Neo's Cypher на самом деле говорят, что можно передавать словари, подразумевая значения И ключи. Или я ошибаюсь? Это из-за py2neo тогда? Изменить: мне нужно как минимум SET для обработки словаря - person mwienhold; 11.03.2014
comment
Нет, я не думаю, что это проблема, связанная с py2neo. Насколько я знаю, вы не можете указать свойства узла в качестве параметров - person tstorms; 11.03.2014
comment
Я понял. Неправильно прочитайте документы по настройке всех свойств на узле, где мне нужно указать узел, а затем передать ему словарь. Упс. В любом случае спасибо за ваши быстрые ответы! - person mwienhold; 11.03.2014
comment
Вы можете сделать CREATE (n {p}) с вашей картой параметров p. Или MATCH (n {name:{p}.name}) SET n = {p}. - person jjaderberg; 11.03.2014