使用 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 2.2 + Neo4j 3.5)