gpt4 book ai didi

python - Bulbflow – 如何将列表/字典保存为属性

转载 作者:太空狗 更新时间:2023-10-30 03:03:25 25 4
gpt4 key购买 nike

我正在使用 Bulbflow访问 Neo4j通过 python。

我现在正尝试将 python 列表保存为节点属性,但一直遇到错误。来自documentation ,我可以看到列表在模型中定义时是可接受的类型,但我想在定义模型后保存列表属性,即

anode = g.vertices.get(123)
anode.specs = [(2, 0.27911702036756064), (5, 0.6708785014712791)]
anode.save()

但是我得到以下错误:

SystemError: (
{'status': '200',
'content-length': '142',
'content-type': 'application/json; charset=UTF-8',
'access-control-allow-origin': '*',
'server': 'Jetty(6.1.25)'},
'"java.lang.IllegalArgumentException:
Unknown property type on: [[2, 0.27911702036756064], [5, 0.6708785014712791]],
class java.util.ArrayList"')

我尝试使用 convert_to_db 函数,但不确定语法是什么。

关于如何实现这一点有什么想法吗?问题是我有一个元组列表吗?

谢谢!

==============更新==============

按照 Peter 的建议,我尝试了一个简单的平面列表,但遇到了同样的错误:

SystemError: (
{'status': '200',
'content-length': '172',
'content-type': 'application/json; charset=UTF-8',
'access-control-allow-origin': '*',
'server': 'Jetty(6.1.25)'},
'"java.lang.IllegalArgumentException:
Unknown property type on: [0.0, 0.0, 0.0, 0.42659109777029425, 0.0, 0.0, 0.0, 0.0, 0.5234052770685714, 0.0],
class java.util.ArrayList"')

有什么想法吗?

最佳答案

Neo4j 只支持包含原始类型的列表,例如 stringintbool 等(列表中的混合类型不支持允许)。

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

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

要在 Neo4j 中存储混合类型的 list,您可以将其保存为 JSON 文档字符串。

Bulbs 有一个Document Property 类型,可以为您执行dict<->json 转换。

看...

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

specs = [(2, 0.27911702036756064), (5, 0.6708785014712791)]
anode = g.vertices.get(123)
anode.specs = g.client.type_system.database.to_document(specs)
anode.save()

但是,如果您使用的是 Model,Bulbs 会为您进行转换。只需使用 Document 属性而不是 List 来定义您的模型:

# 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)
specs = 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)

>>> specs = [(2, 0.27911702036756064), (5, 0.6708785014712791)]

# You can save specs when you create it...
>>> james = g.people.create(name="James", specs=specs)

# ...or save it after creation...
>>> julie = g.people.create(name="Julie")
>>> julie.specs = specs
>>> julie.save()

参见 http://bulbflow.com/docs/api/bulbs/model/

关于python - Bulbflow – 如何将列表/字典保存为属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19033357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com