Python中使用Neo4j等图数据库的ORM
我在想,是否有一种解决方案(或者说是否有这个需求)可以让图数据库(比如Neo4j)使用ORM。我的工作是追踪实体之间的关系(比如A和B有关系,B和C有关系,这样就构成了一个大的图),并且这些实体还有额外的属性,我需要把它们存储在数据库里,我觉得图数据库非常适合这个任务。
现在,对于像SQL这样的数据库,我使用SQLAlchemy的ORM来存储我的对象,特别是因为我可以从数据库中获取对象,并以一种Python风格的方式与它们进行操作(比如调用它们的方法等)。
那么,是否有针对Neo4j或其他图数据库的对象映射解决方案,这样我就可以轻松地将Python对象存储到图数据库中,并从中检索出来?
或者,你会像在Python的SQLite文档中那样(http://docs.python.org/library/sqlite3.html#letting-your-object-adapt-itself)编写一些函数或适配器来存储和检索对象吗?
3 个回答
自我推荐一下……我还有一个自己的ORM(对象关系映射),你也可以看看:https://github.com/robinedwards/neomodel
这个ORM是基于py2neo构建的,底层使用了cypher和REST API调用,也就是说,它不依赖于gremlin。
现在在Python中有几种选择,可以基于数据库的REST接口来使用。
正如我在@Peter提供的链接中提到的,我们正在开发neo4django,这个工具更新了旧版的Neo4j和Django的整合。如果你需要进行复杂的查询,并且想要一个可以管理节点索引的ORM,或者你已经在使用Django,那么这个选择非常合适。它的工作方式和原生的Django ORM非常相似。你可以在PyPi或者GitHub上找到它。
还有一个更通用的解决方案叫做Bulbflow,据说可以与任何由Blueprints支持的图形数据库一起使用。我没有使用过这个工具,但从我看到的情况来看,它主要关注领域建模——比如Bulbflow已经有了可用的关系模型,而我们还在开发中——但在复杂查询方面的支持不太强(就像我们使用Django的查询集和索引那样)。它还让你可以更接近图形的操作。