2017-09-29 105 views
9

由于Django的思维方式对我来说依然非常陌生,所以我很抱歉。我试图生成一个非常简单的页面,只是列出了使用Neo4j和Django(1.9.7)的简单密码查询的所有结果,我使用Python Neo4j驱动程序从Django访问数据库。然而,我陷入了困境,并且已经达到了我只是盲目地尝试事物的地步,因此我希望得到关于我想要实现的基本内容的指示/建议。使用Django查询Neo4j数据库

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,但我totall如何继续下去(因为我一直无法在Django中使用这个驱动程序找到任何好的示例/文档)。

+0

你是说你没有从Neo4j查询中得到结果吗?你能否更具体地处理你所面临的问题。 – EngineeredBrain

回答

1

在Neo4j的蟒驱动器运行方法状态session对象的Documentation

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) 
+0

这是我以前试过的东西之一,它产生''ModelBase'对象不是可迭代的。 –

+0

这就是所谓的[答案](https://stackoverflow.com/questions/18512491/typeerror-object-is-not-iterable) 你不能遍历模型实例。但是,如果您仍然需要解决问题,那么有解决方案。 – hlihovac

+0

我仍然很喜欢这种方式来获得这个工作(能够查询一个neo4j数据库并显示使用这个驱动程序的结果),只是要知道,当你专注于我自己不是100%确定的“模型”当使用现有的neo4j数据库时,以这种方式使用'model'甚至是正确的。 –

0

你可以写一个平坦的RESTful与前端通信的API可以使用React Angular2编写,以便转储和显示数据。所以首先,你可以使用DRF(Django rest Framework),然后所有事情都会发生在你的views.py和serializers.py中,并且在你的models.py中有一点。为什么要避免使用Django模板,查询负载可能会影响您的应用程序顺利运行。