ジャンゴ
この目的のジャンゴのために、いわゆるデータベース・ルータをサポートしています。
class CustomRouter:
def db_for_read(self, model, **hints):
return 'replica'
def db_for_write(self, model, **hints):
return 'master'
をそして、そのようにそれを使用するようにDjangoのORMを設定します。
まず、カスタムルーターを作成します。
DATABASES = {
'default': {},
'primary': {
'NAME': 'master',
'ENGINE': 'django.db.backends.mysql',
'USER': 'mysql_user',
'PASSWORD': 'spam',
},
'replica1': {
'NAME': 'replica',
'ENGINE': 'django.db.backends.mysql',
'USER': 'mysql_user',
'PASSWORD': 'eggs',
},
}
DATABASE_ROUTERS = ['path.to.CustomRouter']
サンプルコードはthe docsから取られた(それは読む価値がある!)と、わずかに調整しました。
SQLAlchemyの(フラスコ)
私はSQLAlchemyのドキュメントを経て、SQLAlchemyのでdjangosデータベースルータのアプローチを実装する方法について説明しthis articleへのリンクを見つけました。
ここでカスタムセッションを使用してこれを正しく実装できます。
次のスニペットは、リンクされた物品から採取され、わずかに調整されます。
あなたのエンジンを作成します。
class RoutingSession(Session):
def get_bind(self, mapper=None, clause=None):
if self._flushing:
return engines['master']
else:
return engines['replica']
をそして、このようなあなたのセッションを作成します:
engines = {
'master': create_engine('postgresql://user:***@localhost:5432/master',
logging_name='master'),
'replica': create_engine('postgresql://user:***@localhost:5432/replica',
logging_name='replica'),
}
は、カスタムセッションクラスを作成します
Session = scoped_session(sessionmaker(class_=RoutingSession, autocommit=True))
詳細と制限についての記事を読みます。