91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django連接數據庫并實現讀寫分離過程解析

發布時間:2020-09-20 00:36:54 來源:腳本之家 閱讀:174 作者:Sean_Yang 欄目:開發技術

這篇文章主要介紹了Django連接數據庫并實現讀寫分離過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

前言

當一個項目當中有大量的數據的時候,你所有的IO操作都在一個數據庫中操作,會造成項目的性能的降低。如果你能對項目中的數據進行讀寫分離的話,那么將大大提高你項目的性能。而Django自帶的機制也對此提供了支持。我們可以簡單的操作一下。(當然數據的同步還是需要運維同志的協助)

修改配置文件

Django默認的是default,我們按照它的格式直接添加一個新的配置:

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

當然,如果你不想使用默認的sqlite3,想使用mysql還需要自己進行一下配置

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'HOST': '127.0.0.1', # 主服務器的運行ip
    'PORT': 3306,  # 主服務器的運行port
    'USER': 'django', # 主服務器的用戶名
    'PASSWORD': 'django', # 主服務器的密碼
    'NAME': 'djangobase'  # 數據表名
  },
  'slave': {
    'ENGINE': 'django.db.backends.mysql', 
    'HOST': '127.0.0.1',
    'PORT': 8306,
    'USER': 'django_slave',
    'PASSWORD': 'django_slave',
    'NAME': 'djangobase_slave'
  }
}  

在項目目錄下的__init__文件中添加以下代碼,將數據連接方式改為pymysql

import pymysql
pymysql.install_as_MySQLdb()

將數據配置修改完之后就可以在models.py文件當中創建表,接下里就可以進行數據庫遷移了

python manage.py makemigrations # 在migrations文件夾下生成記錄
python manage.py migrate --database default # 默認可以不寫參數
python manage.py migrate --database db2 # 在從庫再遷移一次,就可以在上面建立相同的表

手動讀寫分離

在遇到數據庫相關操作的話,需要手動指定要使用的相應數據庫,不需要進行多余的配置,但是,當你數據的讀寫操作過于頻繁的時候,這個方法就會略顯繁瑣。

from django.shortcuts import render, HttpResponse
from app001 import models
# Create your views here.
def write(request):
  models.User.objects.using('default').create(name='張三', pwd='123', phone=1234)
  return HttpResponse('寫成功')
def read(request):
  obj = models.User.objects.filter(id=1).using('db2').first()
  return HttpResponse('讀成功')

自動讀寫分離

通過配置數據庫路由,來自動實現讀寫分離,這樣就不需要每次讀寫都手動指定數據庫。

在項目的app中創建db_router.py文件,并在該文件中定義一個數據庫路由類,用來進行讀寫分離,這個類最多提供四個方法,分別是:db_for_read、db_for_write、allow_relation、allow_migrate,以下只寫了三個。

定義數據庫路由類

class MasterSlaveDBRouter(object):
  """數據庫主從讀寫分離路由"""
 
  def db_for_read(self, model, **hints):
    """讀數據庫"""
    return "slave"
 
  def db_for_write(self, model, **hints):
    """寫數據庫"""
    return "default"
 
  def allow_relation(self, obj1, obj2, **hints):
    """是否運行關聯操作"""
    return True  

配置Router

在settings.py中指定DATABASE_ROUTERS

DATABASE_ROUTERS = ["app001.db_router.MasterSlaveDBRouter"]

可以指定多個數據庫路由,比如對于讀操作,Django將會循環所有路由中的db_for_read()方法,直到其中一個有返回值,然后使用這個數據庫進行當前操作。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

九台市| 阳原县| 巴彦县| 勐海县| 桦甸市| 徐水县| 庆城县| 荆州市| 常熟市| 离岛区| 雷州市| 柏乡县| 泾阳县| 嘉鱼县| 正蓝旗| 郓城县| 盈江县| 繁峙县| 永定县| 阿克苏市| 泌阳县| 囊谦县| 洮南市| 镇康县| 吉木萨尔县| 琼结县| 达孜县| 大余县| 邵武市| 内丘县| 斗六市| 噶尔县| 遂平县| 集安市| 太白县| 万源市| 德兴市| 班玛县| 长宁县| 高碑店市| 庆阳市|