2015-02-10 103 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 
相关问题