Python實(shí)現(xiàn)自定義讀寫(xiě)分離代碼實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)自定義讀寫(xiě)分離代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
思路
- 自定義Session類
- 重寫(xiě)get_bind方法
- 根據(jù)self._flushing判斷讀寫(xiě)操作, 選擇對(duì)應(yīng)的數(shù)據(jù)庫(kù)
- 自定義SQLAlchemy類
- 重寫(xiě)create_session, 在其中使用自定義的Session類
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)
# 判斷讀寫(xiě)操作
if self._flushing: # 寫(xiě)操作 ,使用主數(shù)據(jù)庫(kù)
print("寫(xiě)入數(shù)據(jù)")
return state.db.get_engine(self.app, bind='master')
else: # 讀操作, 使用從數(shù)據(jù)庫(kù)
print('讀取數(shù)據(jù)')
return state.db.get_engine(self.app, bind='slave')
class RoutingSQLAlchemy(SQLAlchemy):
def create_session(self, options):
return orm.sessionmaker(class_=RoutingSession, db=self, **options)
app = Flask(__name__)
# 設(shè)置數(shù)據(jù)庫(kù)的連接地址
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@192.168.105.134:3306/demo'
# 設(shè)置數(shù)據(jù)庫(kù)的綁定地址
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ù)庫(kù)變化 一般不會(huì)開(kāi)啟, 影響性能
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 設(shè)置是否打印底層執(zhí)行的SQL語(yǔ)句
app.config['SQLALCHEMY_ECHO'] = False
# 創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象
db = RoutingSQLAlchemy(app)
# 用戶表 一
class User(db.Model):
__tablename__ = 't_user'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20), unique=True)
@app.route('/')
def index():
# 增加數(shù)據(jù)
user1 = User(name='zs')
db.session.add(user1)
db.session.commit()
# 查詢數(shù)據(jù)
users = User.query.all()
print(users)
return "index"
if __name__ == '__main__':
# 刪除所有繼承自db.Model的表
db.drop_all()
# 創(chuàng)建所有繼承自db.Model的表
db.create_all()
app.run(debug=True)
不太好,自動(dòng)選擇不能控制
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python實(shí)現(xiàn)mysql的讀寫(xiě)分離及負(fù)載均衡
- Python暴力破解Mysql數(shù)據(jù)的示例
- python查詢MySQL將數(shù)據(jù)寫(xiě)入Excel
- Python操控mysql批量插入數(shù)據(jù)的實(shí)現(xiàn)方法
- python對(duì) MySQL 數(shù)據(jù)庫(kù)進(jìn)行增刪改查的腳本
- Python連接mysql數(shù)據(jù)庫(kù)及簡(jiǎn)單增刪改查操作示例代碼
- Python連接Mysql進(jìn)行增刪改查的示例代碼
- Python操作MySQL數(shù)據(jù)庫(kù)的示例代碼
- Python web框架(django,flask)實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)讀寫(xiě)分離的示例
相關(guān)文章
python繪制散點(diǎn)圖詳細(xì)步驟(從0到1必會(huì))
這篇文章主要介紹了如何使用Python繪制散點(diǎn)圖,包括導(dǎo)入包、準(zhǔn)備數(shù)據(jù)、繪制圖像、修飾圖像(添加標(biāo)題、坐標(biāo)軸標(biāo)簽、顏色圖例)以及整合所有代碼,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-12-12
詳解tensorflow之過(guò)擬合問(wèn)題實(shí)戰(zhàn)
這篇文章主要介紹了詳解tensorflow之過(guò)擬合問(wèn)題實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Python中應(yīng)該使用%還是format來(lái)格式化字符串
這篇文章主要介紹了Python中應(yīng)該使用%還是format來(lái)格式化字符串的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09
Python爬蟲(chóng)之正則表達(dá)式的使用教程詳解
本文實(shí)例代碼相結(jié)合給大家詳細(xì)介紹了Python爬蟲(chóng)之正則表達(dá)式的使用,包括參數(shù)介紹,最常規(guī)的匹配,匹配目標(biāo),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-10-10
Python pathlib模塊使用方法及實(shí)例解析
這篇文章主要介紹了Python pathlib模塊使用方法及實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
python selenium 查找隱藏元素 自動(dòng)播放視頻功能
這篇文章主要介紹了python selenium 查找隱藏元素 自動(dòng)播放視頻功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07

