alter session set current_schema 在全球范围内不起作用
alter session set current_schema not working globally
我正在更改主函数中的模式
db_dwh.cursor.execute("alter session set current_schema = SCHEMA_NAME")
但是当我将这个 db_dwh 对象传递给函数并尝试对 table 执行查询时,我得到 table 没有发现错误,
为此,我必须再次使用以下方式设置架构:
db_dwh.cursor.execute("alter session set current_schema = SCHEMA_NAME")
有什么方法可以在全球范围内只在一个地方设置模式吗?
PS Hadoop 环境中的作业运行。
我希望你的函数有不同的连接 - 我希望你使用的是连接池。
评论有一个解决方案。
这里有一些其他可用的工具。它们可能有用,具体取决于您(或其他读者)的应用程序架构:
Connection.current_schema 而不是显式的 ALTER SESSION。这节省了 execute()
.
的往返开销
连接池回调以有效设置状态:https://cx-oracle.readthedocs.io/en/latest/user_guide/connection_handling.html#session-callbacks-for-setting-pooled-connection-state您说您正在尝试全局设置模式。如果它始终具有相同的值,那么我会将此解决方案与 Connection.current_schema
属性结合使用。
def init_session(connection, requested_tag):
connection.current_schema = 'ALISON'
# Create the pool with a session callback
pool = cx_Oracle.SessionPool(user="whoever", password=userpwd, dsn="orclpdb1", session_callback=init_session)
# Get a connection from the pool. It will always have the current schema
# set to ALISON
connection = pool.acquire()
. . . # Use the connection
我正在更改主函数中的模式
db_dwh.cursor.execute("alter session set current_schema = SCHEMA_NAME")
但是当我将这个 db_dwh 对象传递给函数并尝试对 table 执行查询时,我得到 table 没有发现错误, 为此,我必须再次使用以下方式设置架构:
db_dwh.cursor.execute("alter session set current_schema = SCHEMA_NAME")
有什么方法可以在全球范围内只在一个地方设置模式吗?
PS Hadoop 环境中的作业运行。
我希望你的函数有不同的连接 - 我希望你使用的是连接池。
评论有一个解决方案。
这里有一些其他可用的工具。它们可能有用,具体取决于您(或其他读者)的应用程序架构:
Connection.current_schema 而不是显式的 ALTER SESSION。这节省了
的往返开销execute()
.连接池回调以有效设置状态:https://cx-oracle.readthedocs.io/en/latest/user_guide/connection_handling.html#session-callbacks-for-setting-pooled-connection-state您说您正在尝试全局设置模式。如果它始终具有相同的值,那么我会将此解决方案与
Connection.current_schema
属性结合使用。
def init_session(connection, requested_tag):
connection.current_schema = 'ALISON'
# Create the pool with a session callback
pool = cx_Oracle.SessionPool(user="whoever", password=userpwd, dsn="orclpdb1", session_callback=init_session)
# Get a connection from the pool. It will always have the current schema
# set to ALISON
connection = pool.acquire()
. . . # Use the connection