IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django框架使用Neomodel、django_model连接Neo4j时返回空数组的问题解决 -> 正文阅读

[Python知识库]Django框架使用Neomodel、django_model连接Neo4j时返回空数组的问题解决

1、问题

??这个问题整整困扰了我两天,国内的博客基本都是一笔带过,要不就是用py2neo。py2neo我自己写独立脚本是读写数据进入Neo4j都是没有问题的。后来我把github上面的Django+Neo4j的项目基本开了个遍,也详细看了neomodel和django_model的官方文档和示例。但是都没有得到解决。
??最初,我通过Neo4j官网上的Using Neo4j from Python寻找Neo4j通过Python连接的方案,文末提到了好几个方案。其中包括:

  1. Py2neo
  2. neomodel
  3. django_model
  4. neo4django
  5. etc

??因为neo4django支持neo4j的版本实在太低了,而且应该这个包暂时应该不维护了,所以我排除了4。而django_model是个插件,一般和neomodel结合。经过调研,我决定采用neomodel+django_model。
??出现这个返回空数组的bug之后,接着我通过英文在国际版的bing搜索,结果寥寥。主要参考的还是github上给出的项目实例。我推荐看一下这个项目:A simple Django web app for searching the Paradise Papers dataset backed by Neo4j

此外,我再在github推荐两个项目/官方包:
1、neo4j-movies-python-neomodel
2、django-neomodel

2、解决

??过程很折磨,大概也能想到之后科研之路的不平坦吧。得好好坐冷板凳。
??其实我很早就想到setiting路径的问题,一直感觉是没有访问到数据库。看大部分的代码,都是这样给的:

# Connect to Neo4j Database
config.DATABASE_URL = 'bolt://neo4j的用户名:neo4j的密码@本机ip地址:端口号'
config.ENCRYPTED_CONNECTION = True
config.MAX_POOL_SIZE = 50
config.AUTO_INSTALL_LABELS = False
NEOMODEL_SIGNALS = True

或者是

NEOMODEL_NEO4J_BOLT_URL = os.environ.get('NEO4J_BOLT_URL', 'bolt://neo4j:123456@localhost:7687')
NEOMODEL_SIGNALS = True
NEOMODEL_FORCE_TIMEZONE = False
NEOMODEL_ENCRYPTED_CONNECTION = True
NEOMODEL_MAX_POOL_SIZE = 50

??出现这个问题,第一个要考虑到各个Python包的版本问题。我将涉及到的主要包的版本全部pip install成requirements.txt给出的版本。包括:Django、django-neomodel、neo4j-driver和neomodel。
??我故意将路径改为bolt://neo4j:123456@localhost:7687/neo4j,意思是查找这个active的DBMS下名字为neo4j的数据库。我通过尝试发现,neo4j的3.5版本及以下只能有一个数据库(所以根本不需要指定数据库,这也是为什么很多项目都没有提及指定数据库的路径),而4.0及以上的版本有一个system、neo4j默认的和自己创建的数据库。难怪会报错,原来路径是不符合bolt3.0的协议
报错
??index.html是我写在templates中的模板。同时,记得把setting中默认的数据库路径注释掉:

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': BASE_DIR / 'db.sqlite3',
    # }
}

??沿着网页报错信息往下看,我发现了这不就是neo4j的Cypher图查询语言么?spot是我写的model,而Spot可能是django_model 默认的标签,而这也是我各个Python的包,包括neo4j的版本没有降之前没有查找到数据的原因。因为我的label都是自定义的。接着,我在3.5.32版本的neo4j的数据库中CREATE (spot:Spot{name:'北京天坛',position:'北京'})插入一个节点。
tracing
??在models.py中,我们可以通过参数__label__来选择Neo4j中的标签:

class Spot(DjangoNode):
    # Spot 是默认标签
    __label__ = '人物'
    id = UniqueIdProperty(primary_key=True)
    name = StringProperty()

3、最终

??终于查到了,这是一个Spot类,我们也可以重写str方法:
结果
??我再展示一下目录结构吧:
目录结构
??做个总结:Neo4j 4.0版本及以上,因为在DBMS中可以创建多个数据库,在setting中需要指定数据库。config.DATABASE_URL = 'bolt://neo4j的用户名:neo4j的密码@本机ip地址:端口号/database name'。而Neo4j 4.0以下的版本则不用。最后还需要注意一下label的问题。
??全网博客这种问题基本没有提及,希望读者能少走一些弯路。内容已经写得很清楚。原创不易,有帮助请支持一下。
??PS:未经允许不得转载。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 11:38:17  更:2022-04-26 11:39:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 16:21:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码