在django項目中, 一個工程中存在多個APP應用很常見. 有時候希望不同的APP連接不同的數據庫,這個時候需要建立多個數據庫連接。
1. 修改項目的 settings 配置
在 settings.py 中配置需要連接的多個數據庫連接串
2. 設置數據庫的路由規則方法
在settings.py中配置DATABASE_ROUTERS
1DATABASE_ROUTERS = ['Prject.database_router.DatabaseAppsRouter']
Project: 建立的django項目名稱(project_name)
database_router: 定義路由規則database_router.py文件名稱, 這個文件名可以自己定義
DatabaseAppsRouter: 路由規則的類名稱,這個類是在database_router.py文件中定義
3. 設置APP對應的數據庫路由表
每個APP要連接哪個數據庫,需要在做匹配設置,在settings.py文件中做如下配置:
以上的report, regs是項目中的 APP名,分別指定到 ora1, default的數據庫。
為了使django自己的表也創建到你自己定義的數據庫中,你可以指定 : admin, auth, contenttypes, sessions 到設定的數據庫中,如果不指定則會自動創建到默認(default)的數據庫中.
4. 創建數據庫路由規則
在項目工程根路徑下(與 settings.py 文件一級)創建database_router.py文件:
5.原生sql 的使用:
6. Models創建樣例
在各自的 APP 中創建數據表的models時,必須要指定表的 app_label 名字,如果不指定則會創建到default中配置的數據庫名下,
如下:
在app01下創建models
在app02下創建models
7. 生成數據表
在使用django的 migrate 創建生成表的時候,需要加上 –database 參數,如果不加則將 未 指定 app_label 的 APP的models中的表創建到default指定的數據庫中,如:
將app01下models中的表創建到db01的數據庫”db_01”中
./ manage.py migrate--database=db01
將app02下models中的表創建到db02的數據庫”db_02”中
./ manage.py migrate--database=db02
將app03下models中的表創建到default的數據庫”sqlite3”中
./ manage.py migrate
以上創建完成后,其它所有的創建、查詢、刪除等操作就和普通一樣操作就可以了,無需再使用類似
models.User.objects.using(dbname).all()
這樣的方式來操作