如何使用不同的凭据创建到同一个数据库的多个 sqlalchemy 连接?
How to create multiple sqlalchemy connections to the same DB but with different credentials?
我有一个 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 调用预计会花费更长的时间,我想为这些特定调用添加更长的超时时间。为此,我有另一个数据库用户 (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_db
和 db
都使用 user2
的凭据。
最近这样做是为了与一个 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
我有一个 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 调用预计会花费更长的时间,我想为这些特定调用添加更长的超时时间。为此,我有另一个数据库用户 (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_db
和 db
都使用 user2
的凭据。
最近这样做是为了与一个 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