Bulbflow无法创建Dictionary属性类型

时间:2013-04-24 20:50:43

标签: python neo4j bulbs

我使用bulbs来处理python中的neo4j操作。问题是当我尝试使用包含字典的属性创建节点时:

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"')

1 个答案:

答案 0 :(得分:0)

Neo4j不支持词典,它只支持包含原始类型的列表,如string,int,bool等(不允许在列表中使用混合类型)。

以下是Neo4j支持的属性类型:

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

要在Neo4j中存储字典,可以将其另存为JSON字符串。

灯泡有Document Property类型,可为您执行dict< - > json转换。

请参阅...

如果您使用通用VertexEdge,则需要在保存之前手动执行此转换:

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/