国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

django 多數據庫配置教程

2020-02-15 21:35:16
字體:
來源:轉載
供稿:網友

在django項目中, 一個工程中存在多個APP應用很常見. 有時候希望不同的APP連接不同的數據庫,這個時候需要建立多個數據庫連接。

1. 修改項目的 settings 配置

在 settings.py 中配置需要連接的多個數據庫連接串

DATABASES = {  'default': {    'ENGINE': 'django.db.backends.sqlite3',    'NAME': os.path.join(BASE_DIR, 'sqlite3'),  },  'db01': {    'ENGINE': 'django.db.backends.sqlite3',    'NAME': os.path.join(BASE_DIR, 'db_01'),  },  'db02': {    'ENGINE': 'django.db.backends.sqlite3',    'NAME': os.path.join(BASE_DIR, 'db_02'),  },}

假設現在我們用到3個數據庫,一個default默認庫,一個 db01 和 db02

2. 設置數據庫的路由規則方法

在 settings.py 中配置 DATABASE_ROUTERS

DATABASE_ROUTERS = ['Prject.database_router.DatabaseAppsRouter']

Project: 建立的django項目名稱(project_name)

database_router: 定義路由規則database_router.py 文件名稱, 這個文件名可以自己定義

DatabaseAppsRouter: 路由規則的類名稱,這個類是在database_router.py 文件中定義

3. 設置APP對應的數據庫路由表

每個APP要連接哪個數據庫,需要在做匹配設置,在 settings.py 文件中做如下配置:

DATABASE_APPS_MAPPING = {  # example:  # 'app_name':'database_name',  'app02': 'db02',  'app01': 'db01',  'admin': 'db01',  'auth': 'db01',  'contenttypes': 'db01',  'sessions': 'db01',}

以上的app01, app02是項目中的 APP名,分別指定到 db01, db02 的數據庫。

為了使django自己的表也創建到你自己定義的數據庫中,你可以指定 : admin, auth, contenttypes, sessions 到設定的數據庫中,如果不指定則會自動創建到默認(default)的數據庫中

4. 創建數據庫路由規則

在項目工程根路徑下(與 settings.py 文件一級)創建 database_router.py 文件:

from django.conf import settingsDATABASE_MAPPING = settings.DATABASE_APPS_MAPPINGclass DatabaseAppsRouter(object):  """  A router to control all database operations on models for different  databases.  In case an app is not set in settings.DATABASE_APPS_MAPPING, the router  will fallback to the `default` database.  Settings example:  DATABASE_APPS_MAPPING = {'app1': 'db1', 'app2': 'db2'}  """  def db_for_read(self, model, **hints):    """"Point all read operations to the specific database."""    if model._meta.app_label in DATABASE_MAPPING:      return DATABASE_MAPPING[model._meta.app_label]    return None  def db_for_write(self, model, **hints):    """Point all write operations to the specific database."""    if model._meta.app_label in DATABASE_MAPPING:      return DATABASE_MAPPING[model._meta.app_label]    return None  def allow_relation(self, obj1, obj2, **hints):    """Allow any relation between apps that use the same database."""    db_obj1 = DATABASE_MAPPING.get(obj1._meta.app_label)    db_obj2 = DATABASE_MAPPING.get(obj2._meta.app_label)    if db_obj1 and db_obj2:      if db_obj1 == db_obj2:        return True      else:        return False    return None  def allow_syncdb(self, db, model):    """Make sure that apps only appear in the related database."""    if db in DATABASE_MAPPING.values():      return DATABASE_MAPPING.get(model._meta.app_label) == db    elif model._meta.app_label in DATABASE_MAPPING:      return False    return None  def allow_migrate(self, db, app_label, model=None, **hints):    """    Make sure the auth app only appears in the 'auth_db'    database.    """    if db in DATABASE_MAPPING.values():      return DATABASE_MAPPING.get(app_label) == db    elif app_label in DATABASE_MAPPING:      return False    return None            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 秭归县| 吕梁市| 赤水市| 海兴县| 沅江市| 通化县| 雷山县| 青神县| 边坝县| 浠水县| 五华县| 驻马店市| 九江市| 海宁市| 高平市| 石棉县| 昌邑市| 东兰县| 体育| 仁布县| 赤水市| 东宁县| 兴业县| 通渭县| 镇雄县| 邳州市| 大宁县| 天祝| 乡城县| 历史| 土默特右旗| 天镇县| 揭东县| 奉化市| 保靖县| 那曲县| 郯城县| 婺源县| 四会市| 醴陵市| 绥江县|