我试图将Django 1.6.2应用程序升级到1.7.10。我使用运行PostgreSQL 9.3.4和PostGIS 2.1.1的Postgres.app版本9.3.4在我的Mac上运行PostgreSQL。我遇到的问题是,当我运行新的" makemigrations"命令,我收到以下错误(整个堆栈跟踪位于底部):
django.core.exceptions.ImproperlyConfigured: 'django.contrib.gis.db.backends.postgis' isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
u'base', u'mysql', u'oracle', u'postgresql_psycopg2', u'sqlite3'
Error was: cannot import name BaseSpatialOperations
以下是相关设置:
# conf/settings/base.py
DATABASES = {
'default': {
'ENGINE' : 'django.contrib.gis.db.backends.postgis',
'NAME' : 'geodb',
'USER' : 'geo',
'PASSWORD': 'geopassword', # not really
'HOST' : 'localhost',
'PORT' : '',
}
}
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.gis',
'apps.admin', # my apps live in an apps subdir.
'apps.home',
)
POSTGIS_VERSION = (2,1,1)
我在Django 1.6.2应用程序中使用了相同的DATABASE ENGINE设置,没有任何问题。在研究这个问题时,其他一些开发人员忘记在他们的虚拟环境中安装psycopg2,但我的安装版本是2.6.1。我使用2.5.2版与Django 1.6.2,但如果我将psycopg2回滚到该版本,我仍然会收到此错误。我已经阅读了这两个版本之间的所有psycopg2发行说明,但没有看到任何可能导致此问题的内容。
Django 1.7 GeoDjango tutorial也使用了这个postgis引擎设置,因此它似乎不被弃用,并且Django 1.7发行说明中没有任何相关内容表明这可能是一个问题。
我还构建了上面提到的GeoDjango教程的测试版本,如果我在其上运行makemigrations命令,我会得到同样的错误。
最后,我进行了网络搜索,但没有看到任何讨论此迁移/数据库引擎问题的文章。有谁看到了什么错?
谢谢!
# Full stacktrace
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
utility.execute()
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute
django.setup()
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
apps.populate(settings.INSTALLED_APPS)
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
app_config.import_models(all_models)
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/contrib/auth/models.py", line 40, in <module>
class Permission(models.Model):
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/db/models/base.py", line 122, in __new__
new_class.add_to_class('_meta', Options(meta, **kwargs))
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/db/models/base.py", line 297, in add_to_class
value.contribute_to_class(cls, name)
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/db/models/options.py", line 166, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/db/__init__.py", line 40, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/db/utils.py", line 242, in __getitem__
backend = load_backend(db['ENGINE'])
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/db/utils.py", line 126, in load_backend
raise ImproperlyConfigured(error_msg)
django.core.exceptions.ImproperlyConfigured: 'django.contrib.gis.db.backends.postgis' isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
u'base', u'mysql', u'oracle', u'postgresql_psycopg2', u'sqlite3'
Error was: cannot import name BaseSpatialOperations
答案 0 :(得分:3)
我遇到类似的问题,从1.9.9升级到1.10.1
django.core.exceptions.ImproperlyConfigured: 'django.contrib.gis.db.backends.postgis' isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
'mysql', 'oracle', 'postgresql', 'sqlite3'
Error was: cannot import name 'GDALRaster'
它通过升级gdal
依赖关系 - &gt;而消失了。在OSX上为我brew install --upgrade gdal
答案 1 :(得分:2)
出于想法,我将Django从1.7.10升级到1.8.4并且问题消失了。我不知道为什么要修复它,但确实如此。
答案 2 :(得分:0)
正确的解决方法是安装gdal-bin
包(sudo apt-get install gdal-bin
)。对于Xenial(16.04),它已经在标准软件包中提供。对于早期版本,在执行apt-get install
之前,您可能需要执行以下两个额外步骤:
sudo add-apt-repository ppa:ubuntugis/ppa
sudo apt-get update
答案 3 :(得分:0)
django.core.exceptions.ImproperlyConfigured:
'django.db.backends.postgresql_psycopg' is not an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
'mysql', 'oracle', 'postgresql', 'sqlite3'
我完全按照说的做了,将引擎更改为:
"ENGINE":"django.db.backends.postgresql"
现在有效。
(在此之前我尝试sudo apt-get install gdal-bin
没有工作 - &gt;所以如果上述解决方案不起作用,你也应该这样做。)
答案 4 :(得分:0)
DATABASES不喜欢大写字母(或者postresql不喜欢)。
我通过在数据库“ NAME”字段中将大写字母更改为小写来解决此问题。
application.css
蜜饯:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'MyDatabase', <*****WRONG******
'USER': 'admin',
'PASSWORD': 'pass123',
'HOST': 'localhost',
'PORT': '5432',
}
}