Django双应用分别绑定SQLite数据库时出现rc_db标签重复报错如何解决
问题解决步骤
第一步:修复应用标签重复报错
报错原因是INSTALLED_APPS中重复注册了同一应用:你同时写了rcdb和rc_db.apps.RcDbConfig两条配置,Django解析时会识别到重复的应用标签,直接删除rcdb这条配置即可解决该报错。
额外建议:模型类名遵守Django大驼峰命名规范,将rc_db模型类改名为RcDb,避免后续潜在的命名冲突。
修改后的INSTALLED_APPS示例:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'info', 'notice.apps.NoticeConfig', 'rc_db.apps.RcDbConfig', ]
第二步:配置多独立SQLite数据库
修改settings/base.py中的DATABASES配置,新增两个应用对应的独立数据库:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', }, # notice应用专属数据库 'notice_db': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'notice.sqlite3', }, # rc_db应用专属数据库 'rc_db': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'rc_db.sqlite3', } }
第三步:配置数据库路由
新建config/database_router.py文件,编写路由规则指定不同应用的模型操作对应数据库:
class AppDatabaseRouter: def db_for_read(self, model, **hints): if model._meta.app_label == 'notice': return 'notice_db' elif model._meta.app_label == 'rc_db': return 'rc_db' # Django内置应用走默认库 return 'default' def db_for_write(self, model, **hints): if model._meta.app_label == 'notice': return 'notice_db' elif model._meta.app_label == 'rc_db': return 'rc_db' return 'default' def allow_relation(self, obj1, obj2, **hints): # 同库的模型允许关联查询 if obj1._meta.app_label in ['notice', 'rc_db'] and obj1._meta.app_label == obj2._meta.app_label: return True return None def allow_migrate(self, db, app_label, model_name=None, **hints): if app_label == 'notice': return db == 'notice_db' elif app_label == 'rc_db': return db == 'rc_db' # 内置应用仅允许迁移到默认库 return db == 'default'
在settings/base.py中添加路由配置激活规则:
DATABASE_ROUTERS = ['config.database_router.AppDatabaseRouter']
第四步:执行迁移
多数据库场景下需要分别指定数据库执行迁移命令:
- 迁移默认库(存放Django内置应用数据):
python manage.py migrate - 迁移notice应用数据库:
python manage.py migrate --database=notice_db - 迁移rc_db应用数据库:
python manage.py migrate --database=rc_db
内容的提问来源于stack exchange,提问作者ChanToRe
相关产品推荐
相关产品推荐

