You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加载django-municipios地理数据fixture时AttributeError的解决方法

解决Django loaddata导入地理数据时的AttributeError问题

你执行python manage.py loaddata municipios_geo_2013_4674.json.bz2或python manage.py loaddata municipios_geo_2013_4674.json时遇到的AttributeError: 'DatabaseOperations' object has no attribute 'Adapter'错误,本质是Django的GIS数据库适配层出了问题,下面是具体的排查和解决步骤:

1. 检查数据库引擎配置(最常见原因)

这个错误大概率是因为你在settings.py里用了普通的数据库引擎,而非GIS专用引擎:

  • 若使用PostgreSQL+PostGIS,需修改数据库引擎配置:
    DATABASES = {
        'default': {
            'ENGINE': 'django.contrib.gis.db.backends.postgis',
            # NAME、USER、PASSWORD等其他配置保持不变
        }
    }
    
  • 若用SQLite仅作开发测试,生产环境不推荐,需改成:
    'ENGINE': 'django.contrib.gis.db.backends.sqlite3'
    

普通的django.db.backends.postgresql或django.db.backends.sqlite3不支持GIS字段处理,因此会出现找不到Adapter的错误。

2. 确认GIS依赖已正确安装

  • 若使用PostgreSQL:
    • 安装依赖包:pip install psycopg2-binary
    • 登录PostgreSQL数据库,执行CREATE EXTENSION postgis;启用GIS扩展
  • 确保Django的GIS模块已加入INSTALLED_APPS:
    INSTALLED_APPS = [
        # 其他已注册的app...
        'django.contrib.gis',
        'municipios',  # 别忘了加入django-municipios的应用
    ]
    

3. 检查django-municipios与Django版本的兼容性

从错误回溯来看,你使用的是Python 3.5和Django 1.x系列,需确保安装的django-municipios版本与当前Django版本兼容。可以查看该包的版本历史,安装适配的版本,例如:

pip install django-municipios==<兼容的版本号>

4. 重新迁移数据库(修改配置后)

修改完数据库引擎和INSTALLED_APPS后,需要重新执行迁移,确保GIS相关表结构正确创建:

python manage.py makemigrations
python manage.py migrate

之后再尝试执行loaddata命令导入数据。


附完整错误回溯信息:

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
    utility.execute()
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 355, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/core/management/commands/loaddata.py", line 69, in handle
    self.loaddata(fixture_labels)
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/core/management/commands/loaddata.py", line 109, in loaddata
    self.load_label(fixture_label)
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/core/management/commands/loaddata.py", line 175, in load_label
    obj.save(using=self.using)
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/core/serializers/base.py", line 205, in save
    models.Model.save_base(self.object, using=using, raw=True, **kwargs)
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/db/models/base.py", line 837, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/db/models/base.py", line 904, in _save_table
    forced_update)
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/db/models/base.py", line 954, in _do_update
    return filtered._update(values) > 0
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/db/models/query.py", line 664, in _update
    return query.get_compiler(self.db).execute_sql(CURSOR)
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/db/models/sql/compiler.py", line 1191, in execute_sql
    cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/db/models/sql/compiler.py", line 863, in execute_sql
    sql, params = self.as_sql()
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/db/models/sql/compiler.py", line 1157, in as_sql
    val = field.get_db_prep_save(val, connection=self.connection)
  File "/Users/lidiane/Developer/django/integra-fundaj/.myvenv/lib/python3.5/site-packages/django/contrib/gis/db/models/fields.py", line 182, in get_db_prep_save
    return connection.ops.Adapter(self.get_prep_value(value))
AttributeError: Problem installing fixture '/Users/lidiane/Developer/django/integra-fundaj/municipios_geo_2013_4674.json': 'DatabaseOperations' object has no attribute 'Adapter'

内容的提问来源于stack exchange,提问作者LSM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:20:42