Getting 'DatabaseOperations' object has no attribute 'geo_db_type' error when doing a syncdb

前端 未结 9 1902
有刺的猬
有刺的猬 2020-12-01 08:43

I\'m attempting to run heroku run python manage.py syncdb on my GeoDjango app on Heroku, but I get the following error:

AttributeError: \'Databa

相关标签:
9条回答
  • 2020-12-01 09:25

    The OP was using the GeoDjango buildpack, but in case anyone gets here using Geo buildpack and dj_database_url like I was, in settings.py don't forget the last line:

    import dj_database_url
    DATABASES['default'] = dj_database_url.config()
    DATABASES['default']['ENGINE'] = 'django.contrib.gis.db.backends.postgis'
    

    UPDATE

    dj_database_url directly supports PostGIS. You can do without the last line in the code above if you can change your database URL to start with postgis.

    0 讨论(0)
  • 2020-12-01 09:25

    The buildpack was the primary culprit here. Instead of using the GeoDjango buildpack listed on Heroku's buildpack page, I used one of it's forks that was updated more recently.

    Also, when I do a git push heroku master, Heroku creates a dev database for the app, and when I do a syncdb, my DATABASES setting is ignored and Heroku tries to use the dev database instead... obviously an issue, because dev databases don't/can't have PostGIS installed. So I destroyed the dev database after it was created with the git push (with the correct buildpack), then ran syncdb and it works.

    0 讨论(0)
  • 2020-12-01 09:32

    I'm using the Python sample application on stack cedar 14 and the regular Heroko buildpack heroku/python with PostGIS and had the same problem that my database settings were overwritten with the wrong DB engine, which caused heroku run python manage.py migrate to fail with above error. Just adding the engine in the settings would not change anything. After some investigation I found out that it is the call to django_heroku.settings(locals()) in the last line if my settings.py which is reverting my changes.

    I fixed it by overwriting the engine again like this by adding a line afterwards:

    django_heroku.settings(locals())
    DATABASES['default']['ENGINE'] = 'django.contrib.gis.db.backends.postgis'
    
    0 讨论(0)
  • 2020-12-01 09:33

    I changed my default db engine from psycopg2 to postgis

    PREVIOUSLY

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            ...,
        }
    }
    

    NOW

    DATABASES = {
        'default': {
            'ENGINE': 'django.contrib.gis.db.backends.postgis',
            ...,
        }
    }
    
    0 讨论(0)
  • 2020-12-01 09:38

    I forgot to comment out the db settings further down in settings.py:

    # Update database configuration with $DATABASE_URL.
    #db_from_env = dj_database_url.config(conn_max_age=500)
    #DATABASES['default'].update(db_from_env)
    

    These lines were overriding the settings that I had added above

    0 讨论(0)
  • 2020-12-01 09:39

    I got this error when trying to run tests with the test db set like so:

    if 'test' in sys.argv:
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.sqlite3', 
                'NAME': '_testdb',
            }
        }
    

    Problem being that the sqlite3 DatabaseOperations object doesn't have the attribute geo_db_type (like the title of this post suggests).

    My solution was to change the backend to the sqlite equivalent GIS engine:

            'ENGINE': 'django.contrib.gis.db.backends.spatialite'
    

    See the django docs on geodjango installation for all the possible backends, with installation instructions: https://docs.djangoproject.com/en/3.0/ref/contrib/gis/install/#spatial-database

    0 讨论(0)
提交回复
热议问题