1. 程式人生 > 資料庫 >Python web框架(django,flask)實現mysql資料庫讀寫分離的示例

Python web框架(django,flask)實現mysql資料庫讀寫分離的示例

讀寫分離,顧名思義,我們可以把讀和寫兩個操作分開,減輕資料的訪問壓力,解決高併發的問題。

那麼我們今天就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讀寫分離的資料請關注我們其它相關文章!