所以,我正在开发一个多租户 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 任务中访问会话,或者以不同的方式与我的连接事件共享租户?