欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python web框架(django,flask)實現(xiàn)mysql數(shù)據(jù)庫讀寫分離的示例

 更新時間:2020年11月18日 17:02:57   作者:python-講  
這篇文章主要介紹了Python web框架(django,flask)實現(xiàn)mysql數(shù)據(jù)庫讀寫分離的示例,幫助大家更好的理解和學習python,感興趣的朋友可以了解下

讀寫分離,顧名思義,我們可以把讀和寫兩個操作分開,減輕數(shù)據(jù)的訪問壓力,解決高并發(fā)的問題。

那么我們今天就Python兩大框架來做這個讀寫分離的操作。

1.Django框架實現(xiàn)讀寫分離

Django做讀寫分離非常的簡單,直接在settings.py中把從機加入到數(shù)據(jù)庫的配置文件中就可以了。

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

在項目的app文件中創(chuàng)建db_route.py文件,直接在文件里定義一個數(shù)據(jù)庫路由類,用以區(qū)分讀寫操作。

    """數(shù)據(jù)庫讀寫路由"""
    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):
        """是否運行關聯(lián)操作"""
        return True

最后我們在settings.py中寫個路由配置就可以了。

DATABASE_ROUTERS = ["app001.db_router.MasterSlaveDBRouter"]

Flask框架實現(xiàn)讀寫分離

首先自定義Session類,重寫get_bind方法,根據(jù)self.flushing判斷讀寫操作,選擇對應的數(shù)據(jù)庫。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy, SignallingSession, get_state
from sqlalchemy import orm
  
  
class RoutingSession(SignallingSession):
  def get_bind(self, mapper=None, clause=None):
    state = get_state(self.app)
  
    # 判斷讀寫操作
    if self._flushing: # 寫操作 ,使用主數(shù)據(jù)庫
      print("寫入數(shù)據(jù)")
      return state.db.get_engine(self.app, bind='master')
    else: # 讀操作, 使用從數(shù)據(jù)庫
      print('讀取數(shù)據(jù)')
      return state.db.get_engine(self.app, bind='slave')

自定義SQLAlchemy類,重寫create_session方法,并在其內(nèi)使用自定義的Session類。

class RoutingSQLAlchemy(SQLAlchemy):
  def create_session(self, options):
    return orm.sessionmaker(class_=RoutingSession, db=self, **options)

接下來創(chuàng)建app實例,配置數(shù)據(jù)庫的監(jiān)聽文件, 然后創(chuàng)建db連接對象就可以了。

app = Flask(__name__)
# 設置數(shù)據(jù)庫的連接地址
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@192.168.105.134:3306/demo'
# 設置數(shù)據(jù)庫的綁定地址
app.config['SQLALCHEMY_BINDS'] = {
  'master': "mysql://root:mysql@192.168.105.134:3306/demo",
  'slave': "mysql://root:mysql@192.168.105.134:8306/demo"
}
# 設置是否追蹤數(shù)據(jù)庫變化  一般不會開啟, 影響性能
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 設置是否打印底層執(zhí)行的SQL語句
app.config['SQLALCHEMY_ECHO'] = False
  
# 創(chuàng)建數(shù)據(jù)庫連接對象
db = RoutingSQLAlchemy(app)

那么這些就是Python的讀寫分離操作,你學會了嗎?

以上就是Python web框架(django,flask)實現(xiàn)mysql數(shù)據(jù)庫讀寫分離的示例的詳細內(nèi)容,更多關于python MySQL讀寫分離的資料請關注腳本之家其它相關文章!

相關文章

  • 簡單了解Pandas缺失值處理方法

    簡單了解Pandas缺失值處理方法

    這篇文章主要介紹了簡單了解Pandas缺失值處理方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • python numpy庫np.percentile用法說明

    python numpy庫np.percentile用法說明

    這篇文章主要介紹了python numpy庫np.percentile用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python之inspect模塊實現(xiàn)獲取加載模塊路徑的方法

    Python之inspect模塊實現(xiàn)獲取加載模塊路徑的方法

    今天小編就為大家分享一篇Python之inspect模塊實現(xiàn)獲取加載模塊路徑的方法,具有很好的價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python 實現(xiàn)學生信息管理系統(tǒng)的示例

    python 實現(xiàn)學生信息管理系統(tǒng)的示例

    本篇文章主要分享python學生管理系統(tǒng)的使用,文章非常詳細地介紹了通過示例代碼實現(xiàn)的學生管理系統(tǒng),該系統(tǒng)對每個人的研究或工作都有一定的參考學習價值,希望你能在其中有所收獲。
    2020-11-11
  • Python?plt.title()函數(shù)實例詳解

    Python?plt.title()函數(shù)實例詳解

    plt.title() 是 matplotlib 庫中用于設置圖形標題的函數(shù),這篇文章主要介紹了Python?plt.title()函數(shù),需要的朋友可以參考下
    2023-03-03
  • NCCL深度學習之初始化及ncclUniqueId的產(chǎn)生源碼解析

    NCCL深度學習之初始化及ncclUniqueId的產(chǎn)生源碼解析

    這篇文章主要為大家介紹了NCCL源碼解析之初始化及ncclUniqueId的產(chǎn)生詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Pytorch之nn.Upsample()和nn.ConvTranspose2d()用法詳解

    Pytorch之nn.Upsample()和nn.ConvTranspose2d()用法詳解

    nn.Upsample和nn.ConvTranspose2d是PyTorch中用于上采樣的兩種主要方法,nn.Upsample通過不同的插值方法(如nearest、bilinear)執(zhí)行上采樣,沒有可學習的參數(shù),適合快速簡單的尺寸增加,而nn.ConvTranspose2d通過可學習的轉(zhuǎn)置卷積核進行上采樣
    2024-10-10
  • 深入理解Python裝飾器

    深入理解Python裝飾器

    裝飾器(decorator)是一種高級Python語法。裝飾器可以對一個函數(shù)、方法或者類進行加工。這篇文章主要介紹了深入理解Python裝飾器的相關資料,需要的朋友可以參考下
    2016-07-07
  • Django序列化中SerializerMethodField的使用詳解

    Django序列化中SerializerMethodField的使用詳解

    這篇文章主要介紹了Django序列化中SerializerMethodField的使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • ubuntu系統(tǒng)下使用pm2設置nodejs開機自啟動的方法

    ubuntu系統(tǒng)下使用pm2設置nodejs開機自啟動的方法

    今天小編就為大家分享一篇ubuntu系統(tǒng)下使用pm2設置nodejs開機自啟動的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評論