1

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

4

0 回答 0