Django Migrations Says Database Backend Isn't Available
Solution 1
Out of ideas, I upgraded Django from 1.7.10 to 1.8.4 and the problem went away. I don't know why this fixed it but it did.
Solution 2
I was having similar problems upgrading from 1.9.9 to 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'
It went away by upgrading the gdal
dependency -> brew install --upgrade gdal
for me on OSX
Solution 3
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'
Well i did exactly what was told,changed the engine to:
"ENGINE":"django.db.backends.postgresql"
it works now.
(before this i tried sudo apt-get install gdal-bin
which didn't work -> so if above solution doesn't work, you should do this too.)
Jim
Updated on June 09, 2022Comments
-
Jim almost 2 years
I'm trying to upgrade a Django 1.6.2 application to 1.7.10. I'm running PostgreSQL on my Mac using the Postgres.app version 9.3.4 that runs PostgreSQL 9.3.4 and PostGIS 2.1.1. The problem I'm having is that when I run the new "makemigrations" command, I'm getting the following error (the entire stacktrace is at the bottom):
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
Here are the pertinent settings:
# 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)
I used this same DATABASE ENGINE setting in my Django 1.6.2 application without any problems. In researching this, some other developers forgot to install psycopg2 in their virtual environment but I do have version 2.6.1 installed in mine. I was using version 2.5.2 with Django 1.6.2 but if I roll psycopg2 back to that version I still get this error. I've read all the psycopg2 release notes between those two versions and didn't see anything that might cause this problem.
The Django 1.7 GeoDjango tutorial also uses this postgis engine setting so it doesn't appear to be deprecated and there isn't anything pertinent in the Django 1.7 release notes that indicate this could be a problem.I also built a test version of the GeoDjango tutorial mentioned above and if I run the makemigrations command on it, I get the very same error.
Finally, I've done a web search and don't see any articles that discuss this migrations/database engine problem. Does anyone see what's wrong?
Thanks!
# 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
-
davetw12 over 7 yearsThis problem actually rears its ugly head again in Django 1.10. Downgrading to 1.9 fixed my issue.
-
Tom over 7 yearsSame problem as @davetw12 - downgrading to the latest 1.9 resolved it
-
Ryan Allen over 7 yearsCheck out my comment for upgrading to 1.10