Django4.0 多數(shù)據(jù)庫(kù)-定義數(shù)據(jù)庫(kù)

2022-03-16 17:38 更新

首先告知 Django,你正在使用至少2個(gè)數(shù)據(jù)庫(kù)服務(wù)。通過(guò) ?DATABASES ?配置來(lái)將指定的數(shù)據(jù)庫(kù)鏈接放入一個(gè)字典,以此來(lái)映射數(shù)據(jù)庫(kù)別名,數(shù)據(jù)庫(kù)別名是在整個(gè)Django中引用特定數(shù)據(jù)庫(kù)的一種方式。

可以選擇任意的數(shù)據(jù)庫(kù)別名,但是``?default?`` 別名具有特殊意義。當(dāng)沒(méi)有數(shù)據(jù)庫(kù)指定選擇的時(shí)候,Django 使用帶有 ?default ?別名的數(shù)據(jù)庫(kù)。

接下來(lái)一個(gè) ?settings.py? 片段,定義了2個(gè)數(shù)據(jù)庫(kù)——默認(rèn)的 PostgreSQL 數(shù)據(jù)庫(kù)和名叫 ?users ?的 MySQL 數(shù)據(jù)庫(kù)。

DATABASES = {
    'default': {
        'NAME': 'app_data',
        'ENGINE': 'django.db.backends.postgresql',
        'USER': 'postgres_user',
        'PASSWORD': 's3krit'
    },
    'users': {
        'NAME': 'user_data',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'priv4te'
    }
}

如果 ?default ?數(shù)據(jù)庫(kù)的設(shè)計(jì)在項(xiàng)目中沒(méi)有使用,那么你需要特別注意始終指定你所使用的數(shù)據(jù)庫(kù)。Django 需要定義 ?default? 數(shù)據(jù)庫(kù),但如果沒(méi)有使用數(shù)據(jù)庫(kù)的話,參數(shù)字典可以置空。這樣,你必須為所有的模型,包括你所使用的任何 ?contrib ?和第三方 app 設(shè)置 ?DATABASE_ROUTERS?,所以不會(huì)有任何查詢路由到默認(rèn)數(shù)據(jù)庫(kù)。下面示例來(lái)講在默認(rèn)數(shù)據(jù)庫(kù)為空的情況下,如何定義兩個(gè)非默認(rèn)數(shù)據(jù)庫(kù):

DATABASES = {
    'default': {},
    'users': {
        'NAME': 'user_data',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'superS3cret'
    },
    'customers': {
        'NAME': 'customer_data',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_cust',
        'PASSWORD': 'veryPriv@ate'
    }
}

如果您嘗試訪問(wèn)您尚未在 ?DATABASES ?設(shè)置中定義的數(shù)據(jù)庫(kù),Django 將引發(fā) ?django.utils.connection.ConnectionDoesNotExist? 異常。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)