我在基于django的应用程序中使用Neo4Django并尝试同时使用两个数据库:Neo4j和PostGIS。所以我按照文档(http://neo4django.readthedocs.org)和models.py中的建议配置了settings.py。
当我尝试运行syncdb时,我收到此消息
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'postgres'):
E-mail address: postgres@gmail.com
Password:
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
但是当我检查表格和图表是否已创建时,我什么也没找到!
我正在使用django 1.4和neo4j 1.9.M05。
以下是我在settings.py中声明数据库的方法:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'geodjango',
'USER': 'postgres',
}
}
NEO4J_DATABASES = {
'default' : {
'HOST':'127.0.0.1',
'PORT':7474,
'ENDPOINT':'/db/data/'
}
}
DATABASE_ROUTERS = ['neo4django.utils.Neo4djangoIntegrationRouter']
我宣布我的models.py是这样的:
from neo4django.db import models
from django.contrib.gis.db import models as gis
class Airport(models.NodeModel):
name = models.StringProperty()
iata = models.StringProperty()
icao= models.StringProperty()
city = models.Relationship('self',rel_type='isAT')
#geographical database for storing entities coordinates
class pointsOfInterest(gis.Model):
nodeid = gis.IntegerField()
longitude = gis.FloatField()
latitude = gis.FloatField()
# GeoDjango-specific: a geometry field (MultiPolygonField), and
# overriding the default manager with a GeoManager instance.
objects = gis.GeoManager()
感谢您的帮助
修改
当我运行python manage.py sqlall testapp
(其中testapp是我的应用程序并且在删除neo4j模型之后,否则它将无法工作),我得到允许创建表的sql:
BEGIN;
CREATE TABLE "testapp_pointsofinterest" (
"id" serial NOT NULL PRIMARY KEY,
"nodeid" integer NOT NULL,
"longitude" double precision NOT NULL,
"latitude" double precision NOT NULL
)
;
COMMIT;
之后我运行./manage.py syncdb
并且只创建了pointsOfInterest表(不是图表)
postgres@anas-desktop:/home/anas/Desktop/testNeo4Django$ ./manage.py syncdb
Creating tables ...
Creating table testapp_pointsofinterest
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
为什么代表我模型的节点没有在graphdb中创建?
答案 0 :(得分:1)
实际上根本没有任何问题!
第一次运行./manager.py syncdb
时,在sql数据库中创建了pointsOfInterest表,我没有注意到
对于以下尝试,我希望此命令将neo4j模型作为将要插入graphdb的未来节点的一种“根”节点插入(虽然看起来这个命令不会这样做) ,并关注以前的表没有添加的事实(虽然之前添加了,而Django没有替换现有的表)
问题解决了!