South + Django 1.4 Database error

前端 未结 3 1901
北荒
北荒 2021-02-03 23:44

I have just installed my Django project on a new system, and installed Django 1.4. However when I try to run manage.py runserver or manage.py syncdb I

3条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-02-04 00:05

    I have the same error message but with a different cause and solution compared to the accepted answer. The short answer is adding SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'} to settings.py.

    Here is the full explanation:

    Tracing to south/db/__init__.py shows that no database was detected, the reason being that my database engine name is not in the hardcoded list in south/db/__init__.py

    engine_modules = {
        'django.db.backends.postgresql_psycopg2': 'postgresql_psycopg2',
        'django.db.backends.sqlite3': 'sqlite3',
        'django.db.backends.mysql': 'mysql',
        'django.db.backends.oracle': 'oracle',
        'sql_server.pyodbc': 'sql_server.pyodbc', #django-pyodbc
        'sqlserver_ado': 'sql_server.pyodbc', #django-mssql
        'firebird': 'firebird', #django-firebird
        'django.contrib.gis.db.backends.postgis': 'postgresql_psycopg2',
        'django.contrib.gis.db.backends.spatialite': 'sqlite3',
        'django.contrib.gis.db.backends.mysql': 'mysql',
        'django.contrib.gis.db.backends.oracle': 'oracle',
        'doj.backends.zxjdbc.postgresql': 'postgresql_psycopg2', #django-jython
        'doj.backends.zxjdbc.mysql': 'mysql', #django-jython
        'doj.backends.zxjdbc.oracle': 'oracle', #django-jython
    }
    

    I use postgis 2.0 on Windows and a while ago had to apply a minor patch to django's postgis backend. Because I didn't install django from source, I made a copy of the backend and applied the patch manually to that copy. So the new backend is in a different location, and that location isn't in the list of keys in South's engine_modules shown above.

    Luckily, South provides a settings variable called SOUTH_DATABASE_ADAPTERS that tells South directly the actual database engine of each alias. I was able to run syncdb after inserting this line into settings.py

    SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'}

提交回复
热议问题