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

2022-03-16 17:38 更新

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

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

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

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

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'
    }
}

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號