Не удается настроить графовую базу данных neo4jDjango: объект не имеет атрибута "тип БД"


Я начинаю проект, и я продолжаю получать эту ошибку при выполнении

manage.py sql *ApplicationName*

Обратный след выглядит следующим образом:

  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 304, in handle
    app_output = self.handle_app(app, **options)
  File "/usr/lib/python2.7/site-packages/django/core/management/commands/sql.py", line 19, in handle_app
    return u'\n'.join(sql_create(app, self.style, connections[options.get('database')])).encode('utf-8')
  File "/usr/lib/python2.7/site-packages/django/core/management/sql.py", line 31, in sql_create
    output, references = connection.creation.sql_create_model(model, style, known_models)
  File "/usr/lib/python2.7/site-packages/django/db/backends/creation.py", line 44, in sql_create_model
    col_type = f.db_type(connection=self.connection)
  File "/usr/lib/python2.7/site-packages/neo4django/utils.py", line 161, in __getattr__
    return getattr(super(AttrRouter, self), name)
AttributeError: 'super' object has no attribute 'db_type'

Код является довольно простым примером учебника после многих попыток решить эту проблему.

Setings.py также предполагается, что они верны, так как они скопированы из учебника neo4Django.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', 
        'NAME': 'Database.db',  
    }
}

NEO4J_DATABASES = {
    'default' : {
        'HOST':'localhost',
        'PORT':7474,
        'ENDPOINT':'/db/data'
    }
}
DATABASE_ROUTERS = ['neo4django.utils.Neo4djangoIntegrationRouter']

Neo4j сервер работает, и в sqllite, а также в базе данных mysql все работает, поэтому проблема должна быть на сторона neo4j или neo4django. Также все работает, когда не используются модели neo4Django в домене.

Модель представлена следующим образом:

from neo4django.db import models

    class Person(models.NodeModel):
        name = models.StringProperty()
        age = models.IntegerProperty()
        friends = models.Relationship('self',rel_type='friends_with')
1   2  

1 ответ:

Команда manage.py sql appname (скопирована из документации django)

Выводит инструкции CREATE TABLE SQL для заданных имен приложений.

Поэтому, если вы собираетесь использовать Νeo4j, а не MySQL или SQLite, нет необходимости получать инструкции CREATE TABLE SQL. Кроме того, вы, вероятно, хотели бы лучше выполнить команду syncdb, но опять же вы используете не реляционную БД, а Neo4j, поэтому вам не нужно запускать ни то, ни другое.

Единственная причина, по которой вы следует включить БД в объявление DATABASES на вашем settings.py только потому, что, если вы этого не сделаете, будет вызвана ошибка ImproperlyConfigured.

Таким образом, простой ответ заключается в том, что ошибка верна, просто не запускайте никаких команд Django, связанных с реляционной базой данных.

Еще один совет, не используйте пакет pypi, а версию github https://github.com/scholrly/neo4django (pip install -e git+https://github.com/scholrly/neo4django/#egg=neo4django)