Django Migrations说数据库后端不是';不可用
我正在尝试将Django 1.6.2应用程序升级到1.7.10。我在Mac上运行PostgreSQL,使用的是运行PostgreSQL 9.3.4和PostGIS 2.1.1的9.3.4版。我遇到的问题是,当我运行新的“makemigrations”命令时,我得到以下错误(整个stacktrace位于底部): 以下是相关设置: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
# 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',
}
}