Python web框架(django,flask)實現mysql資料庫讀寫分離的示例
阿新 • • 發佈:2020-11-23
讀寫分離,顧名思義,我們可以把讀和寫兩個操作分開,減輕資料的訪問壓力,解決高併發的問題。
那麼我們今天就Python兩大框架來做這個讀寫分離的操作。
1.Django框架實現讀寫分離
Django做讀寫分離非常的簡單,直接在settings.py中把從機加入到資料庫的配置檔案中就可以了。
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'#資料表名 },'slave':{ 'ENGINE':'django.db.backends.mysql','PORT':3307,'USER':'django_slave','PASSWORD':'django_slave','NAME':'djangobase_slave' } }
在專案的app檔案中建立db_route.py檔案,直接在檔案裡定義一個數據庫路由類,用以區分讀寫操作。
"""資料庫讀寫路由""" defdb_for_read(self,model,**hints): """讀""" return"slave" defdb_for_write(self,**hints): """寫""" return"default" defallow_relation(self,obj1,obj2,**hints): """是否執行關聯操作""" returnTrue
最後我們在settings.py中寫個路由配置就可以了。
DATABASE_ROUTERS=["app001.db_router.MasterSlaveDBRouter"]
Flask框架實現讀寫分離
首先自定義Session類,重寫get_bind方法,根據self.flushing判斷讀寫操作,選擇對應的資料庫。
fromflaskimportFlask fromflask_sqlalchemyimportSQLAlchemy,SignallingSession,get_state fromsqlalchemyimportorm classRoutingSession(SignallingSession): defget_bind(self,mapper=None,clause=None): state=get_state(self.app) #判斷讀寫操作 ifself._flushing:#寫操作,使用主資料庫 print("寫入資料") returnstate.db.get_engine(self.app,bind='master') else:#讀操作,使用從資料庫 print('讀取資料') returnstate.db.get_engine(self.app,bind='slave')
自定義SQLAlchemy類,重寫create_session方法,並在其內使用自定義的Session類。
classRoutingSQLAlchemy(SQLAlchemy): defcreate_session(self,options): returnorm.sessionmaker(class_=RoutingSession,db=self,**options)
接下來建立app例項,配置資料庫的監聽檔案, 然後建立db連線物件就可以了。
app=Flask(__name__) #設定資料庫的連線地址 app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:[email protected]:3306/demo' #設定資料庫的繫結地址 app.config['SQLALCHEMY_BINDS']={ 'master':"mysql://root:[email protected]:3306/demo",'slave':"mysql://root:[email protected]:8306/demo" } #設定是否追蹤資料庫變化一般不會開啟,影響效能 app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False #設定是否列印底層執行的SQL語句 app.config['SQLALCHEMY_ECHO']=False #建立資料庫連線物件 db=RoutingSQLAlchemy(app)
那麼這些就是Python的讀寫分離操作,你學會了嗎?
以上就是Python web框架(django,flask)實現mysql資料庫讀寫分離的示例的詳細內容,更多關於python MySQL讀寫分離的資料請關注我們其它相關文章!