Pycharm не может видеть Oracle Client, хотя он добавлен. Sqlalchemy, Python - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь запустить свой код Python в pycharmie, который подключается к базе данных, хотя это происходит из командной строки, PyCharm возвращает следующую ошибку.

Мне кажется, что я добавил все необходимоеизменения в настройках pycharma для запуска клиента Oracle.

enter image description here

My_file.py

import sqlalchemy as db
engine = db.create_engine('dialect+driver://user:pass@host:port/db')
connection = enigne.connect()

Ошибка от PyCharm

/home/tymoteusz/Desktop/test/venv/bin/python /home/tymoteusz/Desktop/my_task_sqlalchemy/test_document.py
Traceback (most recent call last):
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2221, in _wrap_pool_connect
    return fn()
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 356, in unique_connection
    return _ConnectionFairy._checkout(self)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 811, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 543, in checkout
    rec = pool._do_get()
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 1239, in _do_get
    self._dec_overflow()
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py", line 67, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 277, in reraise
    raise value
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 1236, in _do_get
    return self._create_connection()
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 361, in _create_connection
    return _ConnectionRecord(self)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 488, in __init__
    self.__connect(first_connect_check=True)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 690, in __connect
    connection = pool._invoke_creator(self)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/engine/strategies.py", line 114, in connect
    return dialect.connect(*cargs, **cparams)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 437, in connect
    return self.dbapi.connect(*cargs, **cparams)
cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "libclntsh.so: cannot open shared object file: No such file or directory". See https://oracle.github.io/odpi/doc/installation.html#linux for help

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/tymoteusz/Desktop/my_task_sqlalchemy/test_document.py", line 6, in <module>
    connection = engine.connect()
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2164, in connect
    return self._connection_cls(self, **kwargs)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 103, in __init__
    else engine.raw_connection()
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2252, in raw_connection
    self.pool.unique_connection, _connection
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2225, in _wrap_pool_connect
    e, dialect, self
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1522, in _handle_dbapi_exception_noconnection
    util.raise_from_cause(sqlalchemy_exception, exc_info)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 296, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 276, in reraise
    raise value.with_traceback(tb)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2221, in _wrap_pool_connect
    return fn()
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 356, in unique_connection
    return _ConnectionFairy._checkout(self)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 811, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 543, in checkout
    rec = pool._do_get()
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 1239, in _do_get
    self._dec_overflow()
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py", line 67, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 277, in reraise
    raise value
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 1236, in _do_get
    return self._create_connection()
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 361, in _create_connection
    return _ConnectionRecord(self)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 488, in __init__
    self.__connect(first_connect_check=True)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 690, in __connect
    connection = pool._invoke_creator(self)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/engine/strategies.py", line 114, in connect
    return dialect.connect(*cargs, **cparams)
  File "/home/tymoteusz/.local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 437, in connect
    return self.dbapi.connect(*cargs, **cparams)
sqlalchemy.exc.DatabaseError: (cx_Oracle.DatabaseError) DPI-1047: 64-bit Oracle Client library cannot be loaded: "libclntsh.so: cannot open shared object file: No such file or directory". See https://oracle.github.io/odpi/doc/installation.html#linux for help (Background on this error at: http://sqlalche.me/e/4xp6)

Process finished with exit code 1

Как мне решить мою проблему?Почему Терминал запускает код без возврата ошибки, а PyCharm возвращает ошибку, связанную с клиентской библиотекой Oracle.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 19 февраля 2019

Если вы делаете это на macOS (что, как я догадываюсь, установило DYLD_LIBRARY_PATH), вам нужно поместить Oracle Instant Client в ~ / lib или как описано в инструкциях по установке cx_Oracle https://cx -oracle.readthedocs.io / en / latest / installation.html # install-oracle-instant-client , поскольку защита SIP в macOS теперь останавливает работу DYLD_LIBRARY_PATH в подоболочках.

Я бы также рекомендовал использовать Instant Client 12.2, если вам действительно не нужно подключаться к очень старым версиям БД. С клиентом 12.2 вы можете подключиться к Oracle DB 10.2 или более поздней версии.

...