2015-02-10 104 views
0

我有一個flask應用程序使用sqlalchemy。目前,我有這樣的事情:如何創建多個sqlalchemy連接到相同的數據庫但具有不同的憑據?

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqldb://[email protected]:3306' 
db = SQLAlchemy(app) 

user1帳戶對數據庫查詢的默認超時。但是,某些API調用預計需要更長的時間,我想爲這些特定的調用添加更長的超時時間。爲此,我有另一個db用戶(user2),它配置了更長的超時時間。處理與同一個數據庫的連接但使用不同憑據的最無縫方式是什麼?理想情況下,我想有這樣的:

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqldb://[email protected]:3306' 
db = SQLAlchemy(app) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqldb://[email protected]:3306' 
long_query_db = SQLAlchemy(app) 

,並使用long_query_db的就像我之前使用db較長的數據庫查詢。不幸的是,實際發生的情況是app.config在連接創建之前被修改,因此long_query_dbdb都使用user2的憑證。

回答

2

最近這樣做是爲了與一個postgresdb進行登錄以及另一個用於訪問某些數據的mysql數據庫。

config.py

SQLALCHEMY_OUTER_DATABASE = "mysql+mysqlconnector://" + OUTER_LOGIN + ":" + OUTER_PASSWORD + "@" + OUTER_SERVER + ":" + OUTER_PORT + "/" + OUTER_DATABASE 
SQLALCHEMY_BINDS = { 
    'binds': SQLALCHEMY_OUTER_DATABASE 
} 

初始化的.py

global db_outer = None 
.... 


def create_app(config_name): 
    db.init_app(app) # first db 
    engine = create_engine(app.config['SQLALCHEMY_OUTER_DATABASE'], pool_recycle = 3600) 
    db_outer = scoped_session(sessionmaker(bind=engine)) # second db 
相關問題