Django Migrations说数据库后端不是';不可用

Django Migrations说数据库后端不是';不可用,django,postgresql,postgis,django-migrations,Django,Postgresql,Postgis,Django Migrations,我正在尝试将Django 1.6.2应用程序升级到1.7.10。我在Mac上运行PostgreSQL,使用的是运行PostgreSQL 9.3.4和PostGIS 2.1.1的9.3.4版。我遇到的问题是,当我运行新的“makemigrations”命令时,我得到以下错误(整个stacktrace位于底部): 以下是相关设置: # conf/settings/base.py DATABASES = { 'default': { 'ENGINE' : 'django.co

我正在尝试将Django 1.6.2应用程序升级到1.7.10。我在Mac上运行PostgreSQL,使用的是运行PostgreSQL 9.3.4和PostGIS 2.1.1的9.3.4版。我遇到的问题是,当我运行新的“makemigrations”命令时,我得到以下错误(整个stacktrace位于底部):

以下是相关设置:

# 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应用程序中使用了相同的数据库引擎设置,没有任何问题。在研究这个问题时,其他一些开发人员忘记在他们的虚拟环境中安装psycopg2,但我的虚拟环境中安装了2.6.1版。我在Django 1.6.2中使用了2.5.2版,但如果我将psycopg2回滚到该版本,仍然会出现此错误。我已经阅读了这两个版本之间的所有psycopg2发行说明,没有发现任何可能导致此问题的内容。
Django 1.7还使用此postgis引擎设置,因此它似乎没有被弃用,并且Django 1.7发行说明中没有任何相关内容表明这可能是一个问题

我还构建了上面提到的GeoDjango教程的测试版本,如果我在上面运行makemigrations命令,我会得到同样的错误

最后,我做了一次web搜索,没有看到任何讨论迁移/数据库引擎问题的文章。有人知道怎么了吗

谢谢

# 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
#完整堆栈跟踪
回溯(最近一次呼叫最后一次):
文件“manage.py”,第10行,在
从命令行(sys.argv)执行命令
文件“/Users/me/venv/dj_17/lib/python2.7/site packages/django/core/management/_init__.py”,第385行,从命令行执行
utility.execute()
文件“/Users/me/venv/dj_17/lib/python2.7/site-packages/django/core/management/_-init__uuuuu.py”,第354行,在execute中
django.setup()
文件“/Users/me/venv/dj_17/lib/python2.7/site packages/django/_init__.py”,第21行,在安装程序中
应用程序。填充(设置。已安装的应用程序)
文件“/Users/me/venv/dj_17/lib/python2.7/site packages/django/apps/registry.py”,第108行,填充
app_config.import_models(所有_models)
导入模型中的文件“/Users/me/venv/dj_17/lib/python2.7/site packages/django/apps/config.py”,第202行
self.models\u module=导入模块(models\u module\u name)
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/_init__.py”,第37行,在导入模块中
__导入(名称)
文件“/Users/me/venv/dj_17/lib/python2.7/site packages/django/contrib/auth/models.py”,第40行,在
类权限(models.Model):
文件“/Users/me/venv/dj_17/lib/python2.7/site packages/django/db/models/base.py”,第122行,在新的__
新建类。将类添加到类(“元”,选项(元,**kwargs))
文件“/Users/me/venv/dj_17/lib/python2.7/site packages/django/db/models/base.py”,第297行,在add_to_类中
值。贡献给类(cls,名称)
文件“/Users/me/venv/dj_17/lib/python2.7/site packages/django/db/models/options.py”,第166行,在contribute_to_类中
self.db\u table=truncate\u name(self.db\u table,connection.ops.max\u name\u length())
文件“/Users/me/venv/dj_17/lib/python2.7/site packages/django/db/_init__.py”,第40行,在__
返回getattr(连接[默认\u DB\u别名],项)
文件“/Users/me/venv/dj_17/lib/python2.7/site packages/django/db/utils.py”,第242行,在__
后端=加载\u后端(db['ENGINE'])
文件“/Users/me/venv/dj_17/lib/python2.7/site packages/django/db/utils.py”,第126行,在load_后端
raise配置不当(错误消息)
django.core.exceptions.Configured不正确:“django.contrib.gis.db.backends.postgis”不是可用的数据库后端。
尝试使用'django.db.backends.XXX',其中XXX是:
u'base',u'mysql',u'oracle',u'postgresql_psycopg2',u'sqlite3'
错误为:无法导入名称BaseSpatialOperations

出于想法,我将Django从1.7.10升级到1.8.4,问题就解决了。我不知道为什么这样做了,但它做到了。

从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
依赖项->
brew安装——在OSX上为我升级gdal
正确的修复方法是安装
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
我完全按照要求做了,把引擎换成:

"ENGINE":"django.db.backends.postgresql"
现在可以了


(在此之前,我尝试了
sudo-apt-get-install-gdal-bin
,但它不起作用->因此,如果上述解决方案不起作用,您也应该这样做。)

settings.py中的数据库不喜欢大写字母(或者postresql不喜欢?)

我通过将数据库“NAME”字段中的大写字母改为小写字母来解决这个问题

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'MyDatabase',     <*****WRONG******
        'USER': 'admin',
        'PASSWORD': 'pass123',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}
数据库={
“默认值”:{
“引擎”:“django.db.backends.postgresql”,

'NAME':'MyDatabase',尝试升级到最新的postgres.app,它随PostgreSQL 9.4.4和PostGIS 2.1.7一起提供(请记住也要更新您的
POSTGIS_版本
设置。重新安装psycopg2也可能值得。首先,为什么您要升级到现在即将结束的1.7版本而不是LTS 1.8版本?您将需要在12月再次经历所有这些。其次,您是否遵循了以下步骤:第三,您是否使用Virtuallenv?@e4c5我打算升级到1.8版本,但我认为最好停止升级到1.7版本,查看发行说明并更新该版本的最新版本,然后升级到1.8版本,而不是直接从1.6升级到1.8版本。至于geolibs,它们都安装在Postgres应用程序中。是的,我确实使用了一个虚拟环境。@Alasdair我们的建议并没有解决问题。我更新了PostgreSQL/PostGIS,更新了PostGIS设置,并重新安装了psycop2,但没有成功。@Alasdair实际上我升级到了1.8.4,共d个版本
"ENGINE":"django.db.backends.postgresql"
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'MyDatabase',     <*****WRONG******
        'USER': 'admin',
        'PASSWORD': 'pass123',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',    <*****CORRECT******
        'USER': 'admin',
        'PASSWORD': 'pass123',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}