如何创建多个sqlalchemy连接到同一个数据库但具有不同的凭据?

时间:2015-02-10 02:31:23

标签: mysql flask sqlalchemy flask-sqlalchemy

我使用flask创建了sqlalchemy个应用程序。目前,我有这样的事情:

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

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqldb://user1@localhost: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://user1@localhost:3306'
db = SQLAlchemy(app)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqldb://user2@localhost:3306'
long_query_db = SQLAlchemy(app)

并使用long_query_db进行更长的数据库查询,就像之前使用db一样。不幸的是,实际发生的情况是在创建连接之前修改了app.config,因此,long_query_dbdb都使用user2的凭据。

1 个答案:

答案 0 :(得分: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