2014-01-21 21 views
4

sqlalchemy中是否有開發人員指定多個mysql主機嘗試連接的方法,如果第一個連接失敗,它會自動故障轉移到第二個?如何在sqlalchemy中配置故障轉移

+0

你找到這個答案? – Overture

+1

不,我結束了使用mysql-proxy來解決它 – bwbrowning

+0

檢查出https://haalchemy.readthedocs.io/en/latest/從SQLAlchemy的作者 –

回答

0

我有一個MySQL的解決方案中使用名爲MySQL連接/ Python的誰是連接的驅動程序()函數可以接受的參數命名故障轉移

希望未來能幫到一些人。

這裏是參考鏈接:

http://docs.sqlalchemy.org/en/latest/dialects/mysql.html#module-sqlalchemy.dialects.mysql.mysqlconnector

https://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html

在這裏,我的測試代碼

global engine, session, metadata 
from sqlalchemy import create_engine, MetaData 
from sqlalchemy.orm import scoped_session, sessionmaker 
import mysql.connector 
import time 

SQLALCHEMY_DATABASE_URI='mysql+mysqlconnector://test:[email protected]:24801/test?charset=utf8' 
SQLALCHEMY_POOL_SIZE=45 
SQLALCHEMY_POOL_MAX_OVERFLOW=45 

connect_args={ 
    'raise_on_warnings': True, 
    'failover': [{ 
     'user': 'test', 
     'password': 'test2013', 
     'host': '172.16.1.160', 
     'port': 24802, 
     'database': 'test', 
    }, { 
     'user': 'test', 
     'password': 'test2013', 
     'host': '172.16.1.160', 
     'port': 24803, 
     'database': 'test', 
    }] 
} 
engine = create_engine(SQLALCHEMY_DATABASE_URI,connect_args=connect_args, 
         pool_size=SQLALCHEMY_POOL_SIZE, 
         max_overflow=SQLALCHEMY_POOL_MAX_OVERFLOW) 
session = scoped_session(sessionmaker(autocommit=False, 
             autoflush=False, 
             bind=engine)) 
metadata = MetaData(bind=engine) 


base= 2000 

while True: 
    base+=1 
    info = "info%s"%base 
    print info 
    results = session.execute("insert into t1 values(%s,'%s')"%(base,info)) 
    print results 
    session.commit() 
    time.sleep(10)