为何Django教程仅用单数据库?多应用扩展及跨项目存疑
Django应用跨项目使用与数据库配置疑问解答
1. 应用如何跨项目使用?项目数据库未放在父目录,所有数据混在单个数据库中。
Django应用本身是独立的Python包,和项目的数据库位置没有绑定关系:
- 直接把
firstapp目录复制到另一个Django项目的根目录,再在新项目的settings.py里的INSTALLED_APPS列表中添加'firstapp',这个应用就能在新项目正常运行。 - 每个Django项目的数据库都是独立的:新项目执行
python manage.py migrate时,会在自身的db.sqlite(或你配置的其他数据库)中生成firstapp对应的模型表,和原项目的数据库完全无关。原项目的db.sqlite只存储自身项目下所有应用的数据,新项目的数据库是单独的文件,两者互不干扰,不存在数据混杂的问题。
2. 为何不为每个应用单独配置数据库?
Django默认用单数据库是基于实用场景优先的设计:
- 绝大多数中小项目里,多应用共享一个数据库更高效:跨应用的关联查询不需要跨数据库操作,数据备份、迁移、维护的成本更低。
- 关注点分离指的是代码层面的职责划分(应用独立封装业务逻辑、模型、视图),而非强制数据库物理隔离。如果你的业务场景确实需要将某个应用的数据独立隔离(比如数据量极大、合规要求等),Django完全支持多数据库配置:
- 在
settings.py的DATABASES字典中添加多个数据库配置,示例:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', }, 'firstapp_db': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'firstapp_db.sqlite3', } }- 编写数据库路由规则,指定
firstapp的模型使用firstapp_db数据库,实现应用与数据库的绑定。
- 在
简单来说,默认单数据库是通用场景的最优解,多数据库是可选的扩展方案,Django不会强制要求,完全根据你的业务需求选择。
内容的提问来源于stack exchange,提问作者jjk
相关产品推荐
相关产品推荐

