@@ -47,11 +47,18 @@ def connect_to_database(
4747 dbCharset : Optional [str ] = None ,
4848 dbDriver : Optional [str ] = None ,
4949 dbConfigFile : Optional [str ] = None ,
50+ driverMode : Optional [str ] = None ,
5051 ):
5152 """
5253 Loads the DB API 2.0 module given `dbapiModuleName` then uses it to
5354 connect to the database using `dbName`, `dbUsername`, and `dbPassword`.
5455
56+ The `driverMode` is used to select the *oracledb* client mode.
57+ Allowed values are:
58+ - _thin_ (default if omitted)
59+ - _thick_
60+ - _thick,lib_dir=<PATH_TO_ORACLE_CLIENT>_
61+
5562 Optionally, you can specify a `dbConfigFile` wherein it will load the
5663 default property values for `dbapiModuleName`, `dbName` `dbUsername`
5764 and `dbPassword` (note: specifying `dbapiModuleName`, `dbName`
@@ -186,12 +193,33 @@ def connect_to_database(
186193 self .omit_trailing_semicolon = True
187194 elif dbapiModuleName in ["oracledb" ]:
188195 dbPort = dbPort or 1521
196+ driverMode = driverMode or "thin"
189197 oracle_connection_params = db_api_2 .ConnectParams (host = dbHost , port = dbPort , service_name = dbName )
198+ if "thick" in driverMode .lower ():
199+ logger .info ("Using thick Oracle client mode" )
200+ mode_param = driverMode .lower ().split (",lib_dir=" )
201+ if len (mode_param ) == 2 and mode_param [0 ].lower () == "thick" :
202+ lib_dir = mode_param [1 ]
203+ logger .info (f"Oracle client lib dir specified: { lib_dir } " )
204+ db_api_2 .init_oracle_client (lib_dir = lib_dir )
205+ else :
206+ logger .info ("No Oracle client lib dir specified, oracledb will search it in usual places" )
207+ db_api_2 .init_oracle_client ()
208+ oracle_thin_mode = False
209+ elif "thin" in driverMode .lower ():
210+ oracle_thin_mode = True
211+ logger .info ("Using thin Oracle client mode" )
212+ else :
213+ raise ValueError (f"Invalid Oracle client mode provided: { driverMode } " )
190214 logger .info (
191215 f"Connecting using: { dbapiModuleName } .connect("
192216 f"user={ dbUsername } , password=***, params={ oracle_connection_params } )"
193217 )
194218 self ._dbconnection = db_api_2 .connect (user = dbUsername , password = dbPassword , params = oracle_connection_params )
219+ assert self ._dbconnection .thin == oracle_thin_mode , (
220+ "Expected oracledb to run in thin mode: {oracle_thin_mode}, "
221+ f"but the connection has thin mode: { self ._dbconnection .thin } "
222+ )
195223 self .omit_trailing_semicolon = True
196224 elif dbapiModuleName in ["teradata" ]:
197225 dbPort = dbPort or 1025
0 commit comments