使用 Django 查询 Neo4j 数据库

Posted

技术标签:

【中文标题】使用 Django 查询 Neo4j 数据库【英文标题】:Querying a Neo4j DB using Django 【发布时间】:2018-03-11 11:11:02 【问题描述】:

我事先道歉,因为 Django 的思维方式对我来说仍然很陌生。我正在尝试生成一个非常简单的页面,该页面仅列出使用 Neo4j 和 Django(1.9.7)的简单密码查询的所有结果,并且我正在使用 Python Neo4j 驱动程序从 Django 访问数据库。但是,我陷入困境并且已经达到了我只是盲目地尝试事物的地步,因此我想要一些关于我试图实现的基础应该如何看待的指针/建议。

models.py

from django.views.generic.listimport ListView
from neo4j.v1 import GraphDatabase, basic_auth
from django.db import models

# Connect to DB
driver=GraphDatabase.driver("foo1",auth=basic_auth("foo2","foo3"))
session=driver.session()

class Stuff(models.Model):
  query = "MATCH (t:Time) return t"
  results=session.run(query)
  # Sanity check -> This just shows that the database and query both work
  for foo in results:
    print foo
    break
  def __str__(self):
    return results

views.py

from django.views.generic.list import ListView
from .models import Stuff

# I assume that I should be using a ListView here (as I was trying to get a queryset or similar from my models).
class IndexView(ListView):
  template_name = 'index.html'

  def get_queryset(self):
    fooList = []
    for record in Stuff.objects.get():
      fooList.append(record)
    return fooList

index.html(未测试,因为我还没有设法让它“显示”)

% block body %

% if fooList %
  <h1>Woot!</h1>
% endif %

% endblock %

上述位显然不起作用并抱怨Stuff 没有任何objects,但我完全不知道如何继续(因为我找不到任何关于使用此驱动程序的好的示例/文档在 Django 中)。

【问题讨论】:

你是说你没有从 Neo4j 查询中得到results 吗?您能否更具体地说明您面临的问题。 【参考方案1】:

Documentation 的 session 对象在 neo4j python 驱动程序运行方法状态下

run(statement, parameters=None, **kwparameters)

它返回StatementResult 记录的here 对象

所以根据文档,没有 objects 属性,因此 .objects.get() 方法不存在。

在返回的StatementResult 中做访问记录的正确方法在example 中显示如下:

for record in result:
      print("%s %s" % (record["title"], record["name"]))

所以在你的情况下你可能想做:

for record in Stuff:
  fooList.append(record)

【讨论】:

这是我之前尝试过的事情之一,它产生了'ModelBase' object is not iterable 根据这个 SO answer 您不能迭代模型实例。但是,如果您仍然需要它,有解决方案。 我仍在寻找一种方法来使其正常工作(能够查询 neo4j 数据库并使用此驱动程序显示结果),请注意,当您专注于 model 时在使用现有的 neo4j 数据库时,我自己并不能 100% 确定以这种方式使用 model 是否正确。 Google 建议以下您可能会觉得有用的链接:- neo4j-django-tutorial - neo4django【参考方案2】:

您可以编写一个扁平的 REsTFul API 来与前端进行通信,或者用 React Angular2 编写来转储和显示您的数据。所以首先,你可以使用 DRF(Django rest 框架),然后一切都会发生在你的 views.py 和 serializers.py 中,还有一点在你的 models.py 中。为什么避免使用 Django 模板,查询负载可能会影响您的应用程序顺利运行。

【讨论】:

以上是关于使用 Django 查询 Neo4j 数据库的主要内容,如果未能解决你的问题,请参考以下文章

查询数据库时出现 Django 编码错误

Neo4j 使用cypher语言进行查询

使用spring数据从Neo4j查询数据一直返回null

知识图谱现学现用(Django 2.2 + Neo4j 3.5)

知识图谱现学现用(Django 2.2 + Neo4j 3.5)

在 Neo4j 中使用 Ajax 使用 Cypher 查询整个图形数据库