2013-04-24 3 views
1

Im using bulbs для обработки операций neo4j в python. Проблема заключается в том, когда я пытаюсь создать узел со свойством, содержащим словарь:Bulbflow can not create Тип свойства словаря

g.mynode.create(title='Mi Node', fields={'name': 'testNode'}) 

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

*** SystemError: ({'status': '200', 'content-length': '109', 'content-encoding': 
'UTF-8', 'server': 'Jetty(6.1.25)', 'access-control-allow-origin': '*', 'content- 
type': 'application/json'}, '"java.lang.IllegalArgumentException: 
Unknown property type on: {name=testNode}, class java.util.LinkedHashMap"') 
+0

Вы, вероятно, не может задайте свойство Map на узле. Попробуйте разбить его на строку JSON? –

ответ

0

Neo4j не поддерживает словари, и он поддерживает только списки, содержащие примитивные типы, такие как строка, int, bool и т. д. (смешанные типы в списке не допускаются).

Вот типы недвижимости Neo4j поддерживает:

http://docs.neo4j.org/chunked/preview/graphdb-neo4j-properties.html

Чтобы сохранить словарь в Neo4j, вы можете сохранить его в виде строки JSON.

Луковицы имеет тип DocumentProperty, который делает dict < - преобразование>json для вас.

См ...

Если вы работаете с общим Vertex или Edge, что вам нужно сделать это преобразование вручную, прежде чем сохранить его :

type_system = g.client.type_system 
fields = type_system.database.to_document({'name': 'testNode'}) 
g.mynode.create(title='Mi Node', fields=fields) 

Однако, если вы используете Model, лампочки будут выполнять преобразование для вас. Просто определите модель, используя Document свойства вместо Dictionary:

# people.py 

from bulbs.model import Node, Relationship 
from bulbs.property import String, DateTime, Document 
from bulbs.utils import current_datetime 

    class Person(Node): 

     element_type = "person" 

     name = String(nullable=False) 
     fields = Document() 

    class Knows(Relationship): 

     label = "knows" 

     timestamp = DateTime(default=current_datetime, nullable=False) 

... то вы можете использовать модель, как это ...

>>> from people import Person, Knows 
>>> from bulbs.neo4jserver import Graph 

>>> g = Graph() 
>>> g.add_proxy("people", Person) 
>>> g.add_proxy("knows", Knows) 

>>> james = g.people.create(name="James", fields={'name': 'testNode1'}) 
>>> julie = g.people.create(name="Julie", fields={'name': 'testNode2'}) 
>>> knows = g.knows.create(james, julie) 

См http://bulbflow.com/docs/api/bulbs/model/