Cannot connect to DB by passing kwargs to oracledb.connect()
- What versions are you using?
database version: 19c Free Autonomous Database
platform.platform: macOS-13.6.2-arm64-arm-64bit
sys.maxsize > 2**32: True
platform.python_version: 3.11.7
oracledb.__version__: 2.0.1
- Is it an error or a hang or a crash?
Cannot connect to database when I pass host, port, etc. to the connect() function as separate kwargs
- What error(s) or behavior you are seeing?
Traceback (most recent call last):
File "src/oracledb/impl/thin/transport.pyx", line 300, in oracledb.thin_impl.Transport.read_packet
ConnectionResetError: [Errno 54] Connection reset by peer
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "src/oracledb/impl/thin/connection.pyx", line 353, in oracledb.thin_impl.ThinConnImpl._connect_with_address
File "src/oracledb/impl/thin/protocol.pyx", line 207, in oracledb.thin_impl.Protocol._connect_phase_one
File "src/oracledb/impl/thin/protocol.pyx", line 386, in oracledb.thin_impl.Protocol._process_message
File "src/oracledb/impl/thin/protocol.pyx", line 364, in oracledb.thin_impl.Protocol._process_message
File "src/oracledb/impl/thin/protocol.pyx", line 436, in oracledb.thin_impl.Protocol._receive_packet
File "src/oracledb/impl/thin/packet.pyx", line 588, in oracledb.thin_impl.ReadBuffer.wait_for_packets_sync
File "src/oracledb/impl/thin/transport.pyx", line 302, in oracledb.thin_impl.Transport.read_packet
File "/Users/mdilyan/Projects/vdk-oracle-test/supercollidervdk/lib/python3.11/site-packages/oracledb/errors.py", line 162, in _raise_err
raise exc_type(_Error(message)) from cause
oracledb.exceptions.DatabaseError: DPY-4011: the database or network closed the connection
[Errno 54] Connection reset by peer
Help: https://python-oracledb.readthedocs.io/en/latest/user_guide/troubleshooting.html#dpy-4011
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/mdilyan/Projects/docker-xzibit/example_oracle.py", line 12, in <module>
connect(user="ADMIN", password="Gr0mH3llscr3am", host="adb.eu-frankfurt-1.oraclecloud.com", port=1522,service_name="ge975b87ba26804_anotherdb_high.adb.oraclecloud.com")
File "/Users/mdilyan/Projects/vdk-oracle-test/supercollidervdk/lib/python3.11/site-packages/oracledb/connection.py", line 1134, in connect
return conn_class(dsn=dsn, pool=pool, params=params, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/mdilyan/Projects/vdk-oracle-test/supercollidervdk/lib/python3.11/site-packages/oracledb/connection.py", line 523, in __init__
impl.connect(params_impl)
File "src/oracledb/impl/thin/connection.pyx", line 449, in oracledb.thin_impl.ThinConnImpl.connect
File "src/oracledb/impl/thin/connection.pyx", line 445, in oracledb.thin_impl.ThinConnImpl.connect
File "src/oracledb/impl/thin/connection.pyx", line 411, in oracledb.thin_impl.ThinConnImpl._connect_with_params
File "src/oracledb/impl/thin/connection.pyx", line 392, in oracledb.thin_impl.ThinConnImpl._connect_with_description
File "src/oracledb/impl/thin/connection.pyx", line 358, in oracledb.thin_impl.ThinConnImpl._connect_with_address
File "/Users/mdilyan/Projects/vdk-oracle-test/supercollidervdk/lib/python3.11/site-packages/oracledb/errors.py", line 162, in _raise_err
raise exc_type(_Error(message)) from cause
oracledb.exceptions.OperationalError: DPY-6005: cannot connect to database (CONNECTION_ID=ohatDJOgPqC7iWAtDnzjpA==).
DPY-4011: the database or network closed the connection
[Errno 54] Connection reset by peer
Help: https://python-oracledb.readthedocs.io/en/latest/user_guide/troubleshooting.html#dpy-4011
- Does your application call init_oracle_client()?
No
- Include a runnable Python script that shows the problem.
# works fine
from oracledb import ConnectParams, connect
# Works
params = ConnectParams()
params.set(user="ADMIN")
params.set(password="mypass")
params.parse_connect_string("(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.eu-frankfurt-1.oraclecloud.com))(connect_data=(service_name=ge975b87ba26804_anotherdb_high.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))")
connect(params=params)
# Does not work
connect(user="ADMIN", password="mypass", host="adb.eu-frankfurt-1.oraclecloud.com", port=1522, service_name="ge975b87ba26804_anotherdb_high.adb.oraclecloud.com")
Note: I also tried this in my CI on alpine linux with an oracle docker container running on localhost. I get the same issue. Passing localhost:1521/FREE works, but passing it as separate parameters does not.
The two examples you show are not the same! In the first one you have additional parameters (four of them). The one that matters, however, is the protocol parameter. Using protocol tcp (the default) with a cloud database that expects tcps will result in the server rejecting the connection!
I am facing same error The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.496.0_x64__qbz5n2kfra8p0\Lib\threading.py", line 1073, in _bootstrap_inner
self.run()
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.496.0_x64__qbz5n2kfra8p0\Lib\threading.py", line 1010, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\utils\autoreload.py", line 64, in wrapper
fn(*args, **kwargs)
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\core\management\commands\runserver.py", line 136, in inner_run
self.check_migrations()
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\core\management\base.py", line 574, in check_migrations
executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\db\migrations\executor.py", line 18, in init
self.loader = MigrationLoader(self.connection)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\db\migrations\loader.py", line 58, in init
self.build_graph()
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\db\migrations\loader.py", line 235, in build_graph
self.applied_migrations = recorder.applied_migrations()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\db\migrations\recorder.py", line 89, in applied_migrations
if self.has_table():
^^^^^^^^^^^^^^^^
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\db\migrations\recorder.py", line 63, in has_table
with self.connection.cursor() as cursor:
^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\utils\asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\db\backends\base\base.py", line 316, in cursor
return self._cursor()
^^^^^^^^^^^^^^
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\db\backends\base\base.py", line 292, in _cursor
self.ensure_connection()
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\utils\asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\db\backends\base\base.py", line 274, in ensure_connection
with self.wrap_database_errors:
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\db\utils.py", line 91, in exit
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\db\backends\base\base.py", line 275, in ensure_connection
self.connect()
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\utils\asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\db\backends\base\base.py", line 256, in connect
self.connection = self.get_new_connection(conn_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\utils\asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\django\db\backends\oracle\base.py", line 251, in get_new_connection
return Database.connect(
^^^^^^^^^^^^^^^^^
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\oracledb\connection.py", line 1134, in connect
return conn_class(dsn=dsn, pool=pool, params=params, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\oracledb\connection.py", line 523, in init
impl.connect(params_impl)
File "src\oracledb\impl/thin/connection.pyx", line 449, in oracledb.thin_impl.ThinConnImpl.connect
File "src\oracledb\impl/thin/connection.pyx", line 445, in oracledb.thin_impl.ThinConnImpl.connect
File "src\oracledb\impl/thin/connection.pyx", line 411, in oracledb.thin_impl.ThinConnImpl._connect_with_params
File "src\oracledb\impl/thin/connection.pyx", line 392, in oracledb.thin_impl.ThinConnImpl._connect_with_description
File "src\oracledb\impl/thin/connection.pyx", line 358, in oracledb.thin_impl.ThinConnImpl._connect_with_address
File "C:\Users\amitn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\oracledb\errors.py", line 162, in _raise_err
raise exc_type(_Error(message)) from cause
django.db.utils.OperationalError: DPY-6005: cannot connect to database (CONNECTION_ID=vy3/RIJitGRILqYZSjVpiQ==).
DPY-4011: the database or network closed the connection
[WinError 10054] An existing connection was forcibly closed by the remote host
Help: https://python-oracledb.readthedocs.io/en/latest/user_guide/troubleshooting.html#dpy-4011
i am using Oracle Cloud Database,
Settings i had made are DATABASES = { 'default': { 'ENGINE': 'django.db.backends.oracle', 'NAME': 'db001_high', 'USER': 'database_user', 'PASSWORD': 'passoword_to_connect', 'HOST': '<oraclecloud.com address>', 'PORT': '1521', 'TNS_ADMIN':r'D:\DevArea\Wallet_db001', #autocomplete ai added 'Wallet_Passowrd':'Wallet_Password', #autocomplete ai added 'Wallet_Location':r"D:\DevArea\Wallet_db001" # autocomplete ai added }
apart from this. I had set ORACLE_HOME= instantclient address and TNS_ADMIN = wallet_db01 but nothing work.
search in google , one place they ask to NNE enable, after running i found it NNE enabled. Kindly suggest where i am making error or missing anything else.
Thank you
@amitdumka, your error is due to the fact that NNE is enabled and thin mode doesn't support it. You will have to enable thick mode to connect.
thanks for reply, I tried to enable thick mode , I got error of django.db.utils.DatabaseError: ORA-12547: TNS:lost contact
i called oracledb.init_oracle_client(lib_dir=r("c:\oracle\instantclient_21_13") even set ORACLE_HOME=c:\oracle\instantclient_21_13 even tried change location of method path also. but error is same. i can run python code directly like oracledb.init_oracle_client(lib_dir=r("c:\oracle\instantclient_21_13") oracle.connect(parms) i can fetch tables data. but not in django
That error (ORA-12547: TNS:lost contact) is likely due to the fact that you attempted to connect to a server that requires the TCPS protocol using the default TCP protocol. How did you populate your parms variable?
Closing - no activity.