色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:2日期:2022-07-05 08:09:52

讀寫分離,顧名思義,我們可以把讀和寫兩個操作分開,減輕數(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’, # 主服務(wù)器的運行ip’PORT’: 3306, # 主服務(wù)器的運行port’USER’: ’django_master’, # 主服務(wù)器的用戶名’PASSWORD’: ’django_master’, # 主服務(wù)器的密碼’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):'''是否運行關(guān)聯(lián)操作'''return True

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

DATABASE_ROUTERS = ['app001.db_router.MasterSlaveDBRouter']

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

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

from flask import Flaskfrom flask_sqlalchemy import SQLAlchemy, SignallingSession, get_statefrom 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è)置數(shù)據(jù)庫的連接地址app.config[’SQLALCHEMY_DATABASE_URI’] = ’mysql://root:mysql@192.168.105.134:3306/demo’# 設(shè)置數(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è)置是否追蹤數(shù)據(jù)庫變化 一般不會開啟, 影響性能app.config[’SQLALCHEMY_TRACK_MODIFICATIONS’] = False# 設(shè)置是否打印底層執(zhí)行的SQL語句app.config[’SQLALCHEMY_ECHO’] = False # 創(chuàng)建數(shù)據(jù)庫連接對象db = RoutingSQLAlchemy(app)

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

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

標(biāo)簽: Python 編程
主站蜘蛛池模板: 欧美日韩视频一区二区在线观看 | 久操中文在线 | 欧美视频精品在线观看 | 日本免费久久 | 国产一区二区三区毛片 | 久久久视频在线 | a级国产乱理伦片在线观看国 | 亚州一级片 | 男人的亚洲天堂 | 97视频在线免费播放 | 刺激免费视频 | 免费一级欧美片片线观看 | 国产一区二区三区四区五区 | 久久亚洲国产欧洲精品一 | 欧美激情伦妇在线观看 | 99热r| 欧美第一页草草影院浮力 | 亚洲一一在线 | 久久免费公开视频 | 亚洲成a人片在线观 | 久9视频这里只有精品 | 亚洲国产精品综合久久久 | 绝对真实偷拍盗摄高清在线视频 | 美女黄视频免费观看 | 麻豆一级片 | 亚洲 自拍 欧美 综合 | 久久福利青草狠狠午夜 | 久草免费在线色站 | 免费国产成人高清在线观看视频 | 中文字幕在线观看一区 | 成年人激情视频 | 国产丝袜不卡一区二区 | 亚洲在线成人 | 精品欧美日韩一区二区 | 免费看日韩欧美一级毛片 | 亚洲综合美女 | 日韩欧美中文字幕在线观看 | 高清大学生毛片一级 | 日产日韩亚洲欧美综合搜索 | 久久成人国产精品免费 | www.色亚洲|