Skip to content

Commit e2015b5

Browse files
committed
Update OracleAutonomousDatabaseLoader
1 parent c9f60c3 commit e2015b5

File tree

2 files changed

+27
-51
lines changed

2 files changed

+27
-51
lines changed

libs/oracledb/README.md

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -161,32 +161,21 @@ Load documents from Oracle Autonomous Database using `OracleAutonomousDatabaseLo
161161
from langchain_oracledb.document_loaders import OracleAutonomousDatabaseLoader
162162
from settings import s
163163

164-
SQL_QUERY = "select prod_id, time_id from sh.costs fetch first 5 rows only"
164+
SQL_QUERY = "select channel_id, channel_desc from sh.channels where channel_desc = :1 fetch first 5 rows only"
165165

166-
doc_loader_1 = OracleAutonomousDatabaseLoader(
166+
doc_loader = OracleAutonomousDatabaseLoader(
167167
query=SQL_QUERY,
168168
user=s.USERNAME,
169169
password=s.PASSWORD,
170170
schema=s.SCHEMA,
171-
config_dir=s.CONFIG_DIR,
172-
wallet_location=s.WALLET_LOCATION,
173-
wallet_password=s.PASSWORD,
174-
tns_name=s.TNS_NAME,
171+
dsn=s.DSN,
172+
parameters=["Direct Sales"],
175173
)
176-
doc_1 = doc_loader_1.load()
177-
178-
doc_loader_2 = OracleAutonomousDatabaseLoader(
179-
query=SQL_QUERY,
180-
user=s.USERNAME,
181-
password=s.PASSWORD,
182-
schema=s.SCHEMA,
183-
connection_string=s.CONNECTION_STRING,
184-
wallet_location=s.WALLET_LOCATION,
185-
wallet_password=s.PASSWORD,
186-
)
187-
doc_2 = doc_loader_2.load()
174+
doc = doc_loader.load()
188175
```
189176

177+
With mutual TLS authentication (mTLS), wallet_location and wallet_password are required to create the connection, user can create connection by providing either connection string or tns configuration details. With TLS authentication, wallet_location and wallet_password are not required. Bind variable option is provided by argument "parameters".
178+
190179
### Embeddings
191180

192181
#### OracleEmbeddings

libs/oracledb/langchain_oracledb/document_loaders/oracleadb_loader.py

Lines changed: 20 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616

1717
class OracleAutonomousDatabaseLoader(BaseLoader):
1818
"""
19-
Load from oracle adb
19+
Load from Oracle ADB
2020
21-
Autonomous Database connection can be made by either connection_string
22-
or tns name. wallet_location and wallet_password are required
21+
Autonomous Database connection can be made by connection_string
22+
or tns alias. wallet_location and wallet_password are required
2323
for TLS connection.
2424
Each document will represent one row of the query result.
2525
Columns are written into the `page_content` and 'metadata' in
@@ -34,66 +34,53 @@ def __init__(
3434
password: str,
3535
*,
3636
schema: Optional[str] = None,
37-
tns_name: Optional[str] = None,
37+
dsn: Optional[str] = None,
3838
config_dir: Optional[str] = None,
3939
wallet_location: Optional[str] = None,
4040
wallet_password: Optional[str] = None,
41-
connection_string: Optional[str] = None,
4241
metadata: Optional[List[str]] = None,
43-
parameters: Optional[Union[list, tuple, dict]] = None,
42+
parameter: Optional[Union[list, tuple, dict]] = None,
4443
):
4544
"""
4645
init method
4746
:param query: sql query to execute
4847
:param user: username
4948
:param password: user password
5049
:param schema: schema to run in database
51-
:param tns_name: tns name in tnsname.ora
52-
:param config_dir: directory of config files(tnsname.ora, wallet)
53-
:param wallet_location: location of wallet
54-
:param wallet_password: password of wallet
55-
:param connection_string: connection string to connect to adb instance
50+
:param dsn: data source name used to identify the oracle database to connect to
51+
:param config_dir: directory of config files(tnsname.ora, ewallet.pem)
52+
:param wallet_location: location of ewallet.pem, not required for TLS connections
53+
:param wallet_password: password of wallet, not required for TLS connections
5654
:param metadata: metadata used in document
57-
:param parameters: bind variable to use in query
55+
:param parameter: bind variable to use in query
5856
"""
59-
# mandatory required arguments.
57+
# Mandatory required arguments.
6058
self.query = query
6159
self.user = user
6260
self.password = password
6361

64-
# schema
62+
# Schema
6563
self.schema = schema
6664

6765
# TNS connection Method
68-
self.tns_name = tns_name
6966
self.config_dir = config_dir
7067

71-
# wallet configuration is required for mTLS connection
68+
# Wallet configuration is required for mTLS connection
7269
self.wallet_location = wallet_location
7370
self.wallet_password = wallet_password
7471

75-
# connection string connection method
76-
self.connection_string = connection_string
77-
7872
# metadata column
7973
self.metadata = metadata
8074

81-
# parameters, e.g bind variable
82-
self.parameters = parameters
75+
# parameter, e.g bind variable
76+
self.parameter = parameter
8377

8478
# dsn
85-
self.dsn: Optional[str]
86-
self._set_dsn()
87-
88-
def _set_dsn(self) -> None:
89-
if self.connection_string:
90-
self.dsn = self.connection_string
91-
elif self.tns_name:
92-
self.dsn = self.tns_name
79+
self.dsn = dsn
9380

9481
def _run_query(self) -> List[Dict[str, Any]]:
9582
connect_param = {"user": self.user, "password": self.password, "dsn": self.dsn}
96-
if self.dsn == self.tns_name:
83+
if self.config_dir:
9784
connect_param["config_dir"] = self.config_dir
9885
if self.wallet_location and self.wallet_password:
9986
connect_param["wallet_location"] = self.wallet_location
@@ -103,9 +90,9 @@ def _run_query(self) -> List[Dict[str, Any]]:
10390
connection = oracledb.connect(**connect_param)
10491
cursor = connection.cursor()
10592
if self.schema:
106-
cursor.execute(f"alter session set current_schema={self.schema}")
107-
if self.parameters:
108-
cursor.execute(self.query, self.parameters)
93+
connection.current_schema = self.schema
94+
if self.parameter:
95+
cursor.execute(self.query, self.parameter)
10996
else:
11097
cursor.execute(self.query)
11198
columns = [col[0] for col in cursor.description]

0 commit comments

Comments
 (0)