【Python】neomodel 库: Neo4j 图数据库 ORM(对象关系映射)库

Python 中的 neomodel

neomodel 是一个基于 Python 的 Neo4j 图数据库 ORM(对象关系映射)库,旨在让你像使用 Django ORM 一样轻松地操作 Neo4j 数据库。它将图中的节点和关系建模为 Python 类,使图数据库的使用更加直观、优雅。


1. 安装 neomodel

pip install neomodel

依赖 Neo4j 数据库

你需要有正在运行的 Neo4j 服务(推荐使用 Bolt 协议,默认端口 7687)。


2. 快速连接 Neo4j 数据库

from neomodel import config

# 设置数据库连接地址(使用 Bolt 协议)
config.DATABASE_URL = 'bolt://neo4j:your_password@localhost:7687'
  • 格式:bolt://<用户名>:<密码>@<地址>:<端口>

3. 定义节点模型

neomodel 中的每个节点用一个类表示,继承自 StructuredNode

from neomodel import StructuredNode, StringProperty, IntegerProperty

class Person(StructuredNode):
    name = StringProperty(required=True)
    age = IntegerProperty()
  • StringProperty() / IntegerProperty():表示字段类型。
  • required=True:表示字段必填。

4. 创建节点对象

alice = Person(name="Alice", age=30).save()
bob = Person(name="Bob", age=25).save()
  • .save():将对象写入 Neo4j。

5. 查询节点对象

# 查找第一个名字为 Alice 的人
alice = Person.nodes.get(name="Alice")

# 所有年龄大于 20 的人
people = Person.nodes.filter(age__gt=20)
for p in people:
    print(p.name, p.age)
  • nodes.get(...):查找单个节点(若无匹配会抛异常)。
  • nodes.filter(...):条件过滤,支持比较运算符。

6. 建立关系

neomodel 中,关系也可以建模为字段(RelationshipToRelationshipFromRelationship)。

from neomodel import RelationshipTo

class Person(StructuredNode):
    name = StringProperty()
    age = IntegerProperty()
    
    # 与其它 Person 之间的关系
    friends = RelationshipTo('Person', 'FRIEND')

添加关系

alice.friends.connect(bob)

遍历关系

for friend in alice.friends:
    print(friend.name)

7. 关系可以携带属性

from neomodel import StructuredRel, DateProperty, RelationshipTo

class Friendship(StructuredRel):
    since = DateProperty()

class Person(StructuredNode):
    name = StringProperty()
    friends = RelationshipTo('Person', 'FRIEND', model=Friendship)

添加带属性的关系

from datetime import date

alice.friends.connect(bob, {'since': date(2020, 1, 1)})

8. 删除节点与关系

# 删除节点
alice.delete()

# 删除关系
alice.friends.disconnect(bob)

9. 模型常用方法

方法 / 属性说明
.save()保存节点到数据库
.delete()删除节点
.nodes.get(...)查询单个节点(匹配条件)
.nodes.filter(...)查询多个节点
.connect() / .disconnect()建立或断开关系
.all()获取所有节点
.first() / .last()获取第一个/最后一个匹配项

10. 支持的属性类型

类型用法示例
StringProperty字符串
IntegerProperty整数
FloatProperty浮点数
BooleanProperty布尔值
DateProperty日期
DateTimeProperty日期时间
ArrayProperty数组
JSONPropertyJSON 对象

11. 进阶:使用 Cypher 查询

from neomodel import db

results, meta = db.cypher_query("MATCH (p:Person) RETURN p.name")
for row in results:
    print(row[0])

12. 与其他库对比

特性neomodelpy2neoneo4j(官方驱动)
风格ORM 类建模面向对象操作底层事务式 API
复杂关系建模支持结构化关系属性需手动构造关系对象需要手动管理事务
上手难度简单中等偏底层,代码更繁琐
是否推荐原型开发、建模清晰通用图数据库开发对事务/性能要求高场景

13. 总结

操作示例
设置连接config.DATABASE_URL = 'bolt://neo4j:pass@localhost:7687'
定义节点class Person(StructuredNode)
创建节点Person(name="Tom").save()
查询节点Person.nodes.get(name="Tom")
建立关系a.friends.connect(b)
查询关系for p in a.friends:
删除节点p.delete()
自定义关系属性class Friendship(StructuredRel)

neomodel 是 Python 中最接近 ORM 风格的图数据库开发工具,非常适合那些希望像操作 Django ORM 一样使用 Neo4j 的开发者。它能让你更专注于图数据结构的建模,而不用频繁书写 Cypher 查询。适合原型开发、中小型项目、教学、知识图谱建模等场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值