Python實現(xiàn)自定義讀寫分離代碼實例
更新時間:2019年11月16日 11:41:00 作者:太虛真人
這篇文章主要介紹了Python實現(xiàn)自定義讀寫分離代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
這篇文章主要介紹了Python實現(xiàn)自定義讀寫分離代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
思路
- 自定義Session類
- 重寫get_bind方法
- 根據(jù)self._flushing判斷讀寫操作, 選擇對應(yīng)的數(shù)據(jù)庫
- 自定義SQLAlchemy類
- 重寫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)
# 判斷讀寫操作
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')
class RoutingSQLAlchemy(SQLAlchemy):
def create_session(self, options):
return orm.sessionmaker(class_=RoutingSession, db=self, **options)
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)
# 用戶表 一
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)
不太好,自動選擇不能控制
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- python實現(xiàn)mysql的讀寫分離及負(fù)載均衡
- Python暴力破解Mysql數(shù)據(jù)的示例
- python查詢MySQL將數(shù)據(jù)寫入Excel
- Python操控mysql批量插入數(shù)據(jù)的實現(xiàn)方法
- python對 MySQL 數(shù)據(jù)庫進(jìn)行增刪改查的腳本
- Python連接mysql數(shù)據(jù)庫及簡單增刪改查操作示例代碼
- Python連接Mysql進(jìn)行增刪改查的示例代碼
- Python操作MySQL數(shù)據(jù)庫的示例代碼
- Python web框架(django,flask)實現(xiàn)mysql數(shù)據(jù)庫讀寫分離的示例
相關(guān)文章
Python中應(yīng)該使用%還是format來格式化字符串
這篇文章主要介紹了Python中應(yīng)該使用%還是format來格式化字符串的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09
python selenium 查找隱藏元素 自動播放視頻功能
這篇文章主要介紹了python selenium 查找隱藏元素 自動播放視頻功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07

