【发布时间】:2019-06-05 03:19:34
【问题描述】:
我有一个多租户 python falcon 应用程序。每个租户都有自己的数据库。在收到请求时,我需要连接到租户数据库。
但是这里有一种情况。数据库配置存储在另一个服务上,并且配置会定期更改。
我尝试在进程资源之前创建会话。但是在此更改后,sql 查询速度变慢。为了让这更快,我应该怎么做? 附言: 我用的是 PostgreSQL
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session
from sqlalchemy.orm import sessionmaker
import config
import json
import requests
class DatabaseMiddleware:
def __init__(self):
pass
def process_resource(self, req, resp, resource, params):
engineConfig = requests.get('http://database:10003/v1/databases?loadOnly=config&appId=06535108-111a-11e9-ab14-d663bd873d93').text
engineConfig = json.loads(engineConfig)
engine = create_engine(
'{dms}://{user}:{password}@{host}:{port}/{dbName}'.format(
dms= engineConfig[0]['config']['dms'],
user= engineConfig[0]['config']['user'],
password= engineConfig[0]['config']['password'],
host= engineConfig[0]['config']['host'],
port= engineConfig[0]['config']['port'],
dbName= engineConfig[0]['config']['dbName']
))
session_factory = sessionmaker(bind=engine,autoflush=True)
databaseSession = scoped_session(session_factory)
resource.databaseSession = databaseSession
def process_response(self, req, resp, resource, req_succeeded):
if hasattr(resource, 'mainDatabase'):
if not req_succeeded:
resource.databaseSession.rollback()
self.databaseSession.remove()
【问题讨论】:
标签: python python-3.x sqlalchemy multi-tenant falconframework