Conexão ao banco de dados Oracle com Python

Oct 21 2020

Estou tentando me conectar ao meu banco de dados Oracle com Python. No momento, estou usando cx_Oracle para me conectar a ele, mas não funciona ...

#!/usr/bin/python3
import cx_Oracle

dsn_tns = cx_Oracle.makedsn('Host Name', 'Port Number', service_name='Service Name')

conn = cx_Oracle.connect(user=r'user', password='password', dsn=dsn_tns)

c = conn.cursor()
c.execute('select * from person')

conn.close()

Erro:

conn = cx_Oracle.connect(user=r'g_user', password='G_user', dsn=dsn_tns)
cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help

Entrei no Site e não encontrei nada que pudesse ajudar ...

Algo está errado em meu código ou é outra coisa?

Respostas

1 ChristopherJones Oct 22 2020 at 05:52

Seu erro é

DPI-1047: Não é possível localizar uma biblioteca de cliente Oracle de 64 bits: "libclntsh.so: não é possível abrir o arquivo de objeto compartilhado: Não existe esse arquivo ou diretório".

Você precisa dos binários do cliente Oracle Linux de 64 bits no caminho de pesquisa do sistema operacional antes de iniciar o processo Python.

A maneira mais fácil é instalar o Oracle Instant Client gratuito . Use a versão 19c mais recente - ela permitirá que você se conecte ao Oracle DB 11.2 ou posterior. As instruções de instalação estão no rodapé da página de download. Se você instalar os RPMs, tudo será configurado para você. Se você instalar o ZIPS, prefiro definir o caminho de pesquisa da biblioteca com o ldconfigqual também é mostrado nas instruções.

1 AlonBarad Oct 21 2020 at 20:36

Certifique-se de ter instalado o cliente oracle correto (você pode encontrar o pacote do cliente oracle aqui "https://www.oracle.com/in/database/technologies/instant-client/winx64-64-downloads.html" e adicionar a pasta baixada dentro da pasta onde o python está instalado e, em seguida, adicione esse local (local da pasta do pacote do cliente) à variável de ambiente do sistema. Espero que funcione.

Eu sugiro que você verifique primeiro a compatibilidade de sua arquitetura de SO, Python e Oracle Instant Client:

import platform
platform.architecture()

Então, eu definitivamente recomendo que você defina o Oracle Instant Client dentro do seu notebook jupyter:

import os
os.environ["PATH"] = "Complete Location of Instant Client Folder" + ";" + os.environ["PATH"]

Fonte: erro cx_Oracle. DPI-1047: Não é possível localizar uma biblioteca cliente Oracle de 64 bits