因此,我正在开发多租户Flask应用程序。我目前正在使用sqlalchemy和多模式模式。 要定义当前模式,请使用以下功能:
def on_pool_checkout(dbapi_conn, connection_rec, connection_proxy):
cursor = dbapi_conn.cursor()
if 'tenant' in session:
query = "SET search_path TO {}, public;".format(session['tenant'])
print(query)
cursor.execute(query)
dbapi_conn.commit()
cursor.close()
return
cursor.execute("SET search_path TO public;")
print('SCHEMA PUBLIC')
dbapi_conn.commit()
cursor.close()
event.listen(Pool, 'checkout', on_pool_checkout)
当我有请求上下文时,它很好用,但是当celery任务尝试使用连接时,我收到一条错误消息,说我不在请求上下文中工作。
是否可以通过celery任务访问会话,或者以其他方式与我的连接事件共享租户?