0

以下は私の設定です、スレーブは読み取り専用です:

engines = {                                                                        
    'master': create_engine(                                                       
        settings.MASTER_URL, echo=settings.ECHO_SQL, pool_recycle=3600),           
    'slave': create_engine(                                                        
        settings.SLAVE_URL, echo=settings.ECHO_SQL, pool_recycle=3600),            
}                                                                                  


class RoutingSession(Session):                                                     
    def get_bind(self, mapper=None, clause=None):                                  
        #return engines['master']                                                  
        if self._flushing:                                                         
            return engines['master']                                               
        else:                                                                      
            return engines['slave']                                                

DBSession = scoped_session(sessionmaker(class_=RoutingSession))

私がする時 :

s = DBSession()
#synchronize_session=False makes execution faster
s.query(Model).filter(Model.id == 1).delete(synchronize_session=False)
s.commit()

「読み取り専用」のために削除できなかったという例外が発生します。

上記の「削除」で「マスター」データベースを使用するようにRoutingSessionを書き直す方法

---編集1---

さらにテストを行いました。上記の「削除」は、RoutingSession が「マスター」を返す次の「削除」とは異なります。

model = s.query(Model).filter(Model.id == 1).first()
s.delete(model)
s.commit()
4

1 に答える 1