You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Django连接到Neo4J AuraDB(免费版)?

问题描述

我在settings.py中添加了如下配置:

from neomodel import config
import dj_database_url

NEOMODEL_NEO4J_BOLT_URL = 'neo4j+s://xxxxxxx.databases.neo4j.io'
NEOMODEL_SIGNALS = True
NEOMODEL_FORCE_TIMEZONE = False
NEOMODEL_ENCRYPTED_CONNECTION = False
NEOMODEL_MAX_CONNECTION_POOL_SIZE = 50

user = 'neo4j'
psw = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
uri = 'neo4j+ssc://xxxxxxxx.databases.neo4j.io'

DATABASE_URL = 'neo4j+ssc://{}:{}@{}'.format(user, psw, uri)
config.DATABASE_URL = 'neo4j+ssc://{}:{}@{}'.format(user, psw, uri)
DATABASES = {'default': dj_database_url.config(default=DATABASE_URL)}

运行python manage.py migrate时出现错误:

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "S_v1\venv\lib\site-packages\django\core\management\__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "S_v1\venv\lib\site-packages\django\core\management\__init__.py", line 382, in execute
    settings.INSTALLED_APPS
  File "S_v1\venv\lib\site-packages\django\conf\__init__.py", line 102, in __getattr__
    self._setup(name)
  File "S_v1\venv\lib\site-packages\django\conf\__init__.py", line 89, in _setup
    self._wrapped = Settings(settings_module)
  File "S_v1\venv\lib\site-packages\django\conf\__init__.py", line 217, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "C:\Users\P\AppData\Local\Programs\Python\Python38\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 848, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "S_v1\mysite_2\mysite\settings.py", line 102, in <module>
    DATABASES = {'default': dj_database_url.config(default=DATABASE_URL)}
  File "S_v1\venv\lib\site-packages\dj_database_url\__init__.py", line 72, in config
    return parse(
  File "S_v1\venv\lib\site-packages\dj_database_url\__init__.py", line 126, in parse
    raise ValueError(
ValueError: No support for 'neo4j+ssc'. We support: cockroach, mssql, mssqlms, mysql, mysql-connector, mysql2, mysqlgis, oracle, oraclegis, pgsql, postgis, postgres, postgresql, redshift, spatialite, sqlite, timescale, timescalegis

我不想使用Django默认创建的本地数据库,请问有没有办法将我的Django应用连接到云端托管的AuraDB图数据库?


解决方案

Django原生不支持Neo4j(包括AuraDB)作为默认数据库,dj_database_url也未适配Neo4j协议,因此不能通过常规的DATABASES配置方式实现连接。可以通过以下步骤完成集成:

  1. 安装适配库
    使用django-neomodel(基于neomodel开发的Django-Neo4j集成工具),执行安装命令:
pip install django-neomodel
  1. 调整settings.py配置
    移除原配置中用dj_database_url设置DATABASES的代码,保留并优化neomodel相关配置:
from neomodel import config

# AuraDB连接信息
NEO4J_USER = 'neo4j'
NEO4J_PASSWORD = '你的AuraDB密码'
NEO4J_BOLT_URL = 'neo4j+s://xxxxxxx.databases.neo4j.io'  # 直接使用AuraDB控制台提供的Bolt URL

# 配置neomodel连接
config.DATABASE_URL = f"neo4j+s://{NEO4J_USER}:{NEO4J_PASSWORD}@{NEO4J_BOLT_URL.split('://')[1]}"
config.ENCRYPTED_CONNECTION = True  # AuraDB强制要求加密连接,必须设为True

# 将django_neomodel加入INSTALLED_APPS
INSTALLED_APPS = [
    # 原有应用
    'django_neomodel',
]

注意:AuraDB的官方连接URL为neo4j+s://开头,无需使用neo4j+ssc。

  1. 定义图模型
    放弃Django原生的models.Model,改用django_neomodel提供的DjangoNode定义图节点:
from django_neomodel import DjangoNode
from neomodel import StringProperty, IntegerProperty

class Person(DjangoNode):
    name = StringProperty(unique_index=True)
    age = IntegerProperty()

    class Meta:
        app_label = '你的应用名称'
  1. 数据操作
    可直接使用neomodel的API进行CRUD,也支持Django风格的ORM操作:
# 创建节点
person = Person(name='Alice', age=30).save()
# 查询节点
alice = Person.nodes.get(name='Alice')
# 更新节点
alice.age = 31
alice.save()
# 删除节点
alice.delete()
  1. 关键注意事项
  • Django的migrate命令不适用于Neo4j,图数据库无需传统表迁移,定义好节点模型即可直接使用。
  • 若要在Django admin后台管理图模型,需注册NeoModelAdmin:
    from django.contrib import admin
    from django_neomodel.admin import NeoModelAdmin
    from .models import Person
    
    admin.site.register(Person, NeoModelAdmin)
    

内容的提问来源于stack exchange,提问作者Ranjan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 06:23:12