如何使用Django与Neo4j数据库开发GraphQL API?
Graphene-Django + Neo4j 开发 GraphQL API 实现流程
前置准备
提前安装本地Neo4j数据库并启动服务,记录好你的数据库访问账号密码。
实现步骤
- 安装依赖包
执行命令安装所有需要的组件:pip install django graphene-django neomodel django-neomodel - 配置Django项目
新建Django项目和应用后,在settings.py中新增如下配置:- 注册应用:
INSTALLED_APPS = [ # 你的原有应用 'graphene_django', 'django_neomodel' ]- 配置Neo4j连接:
NEOMODEL_NEO4J_BOLT_URL = 'bolt://<你的Neo4j账号>:<你的Neo4j密码>@localhost:7687'- 配置Graphene:
GRAPHENE = { 'SCHEMA': '<你的项目名称>.schema.schema' } - 定义Neo4j数据模型
在应用的models.py中用neomodel定义节点和关系,示例如下:from neomodel import StructuredNode, StringProperty, RelationshipTo class Book(StructuredNode): title = StringProperty(required=True) author = StringProperty(required=True) category = RelationshipTo('Category', 'BELONGS_TO') class Category(StructuredNode): name = StringProperty(unique_index=True, required=True) - 定义GraphQL类型和查询逻辑
在项目根目录新建schema.py文件,编写Graphene类型和解析函数:import graphene from graphene_django import DjangoObjectType from <你的应用名称>.models import Book, Category class BookType(DjangoObjectType): class Meta: model = Book fields = ("id", "title", "author", "category") class CategoryType(DjangoObjectType): class Meta: model = Category fields = ("id", "name") class Query(graphene.ObjectType): all_books = graphene.List(BookType) books_by_category = graphene.List(BookType, category_name=graphene.String()) def resolve_all_books(root, info): return Book.nodes.all() def resolve_books_by_category(root, info, category_name): category = Category.nodes.get(name=category_name) return category.book.all() schema = graphene.Schema(query=Query) - 配置接口路由
在项目的urls.py中添加GraphQL接口路由:from django.urls import path from graphene_django.views import GraphQLView urlpatterns = [ # 你的原有路由 path("graphql/", GraphQLView.as_view(graphiql=True)), ] - 测试接口
启动Django服务后,访问http://localhost:8000/graphql即可打开GraphiQL调试界面,输入如下查询语句测试:query { allBooks { id title author } }
学习资源推荐
- 优先通读Graphene-Django官方文档的类型定义、解析函数相关章节,掌握GraphQL接口的基础开发逻辑
- 通读neomodel官方文档的节点定义、关系定义、查询语法相关章节,熟悉Neo4j数据在Python中的操作方式
- 可以先从单节点的增删改查接口开始练习,再逐步拓展到带关系查询、嵌套查询的场景,遇到映射问题优先核对模型字段和Graphene类型的对应关系
内容的提问来源于stack exchange,提问作者Aanchal Agarwal
相关产品推荐
相关产品推荐

