Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como posso acessar o Oracle a partir do Python?


Aqui está o que funcionou para mim. Minhas versões Python e Oracle são ligeiramente diferentes das suas, mas a mesma abordagem deve ser aplicada. Apenas certifique-se de que a versão do instalador binário do cx_Oracle corresponda ao seu cliente Oracle e às versões do Python.

Minhas versões:
  • Python 2.7
  • Oracle Instant Client 11G R2
  • cx_Oracle 5.0.4 (Unicode, Python 2.7, Oracle 11G)
  • Windows XP SP3

Etapas:
  1. Faça download do pacote Oracle Instant Client. Eu usei instantclient-basic-win32-11.2.0.1.0.zip. Descompacte-o em C:\seu\caminho\para\instantclient_11_2
  2. Baixe e execute o instalador binário cx_Oracle. Eu usei cx_Oracle-5.0.4-11g-unicode.win32-py2.7.msi. Eu o instalei para todos os usuários e o apontei para o local do Python 2.7 encontrado no registro.
  3. Defina as variáveis ​​de ambiente ORACLE_HOME e PATH por meio de um script em lote ou qualquer mecanismo que faça sentido no contexto do seu aplicativo, para que apontem para o diretório do Oracle Instant Client. Veja a fonte oracle_python.bat abaixo. Tenho certeza de que deve haver uma solução mais elegante para isso, mas queria limitar ao máximo minhas alterações em todo o sistema. Certifique-se de colocar o diretório do Oracle Instant Client de destino no início do PATH (ou pelo menos antes de qualquer outro diretório do cliente Oracle). No momento, estou apenas fazendo coisas de linha de comando, então apenas executo oracle_python.bat no shell antes de executar qualquer programa que exija cx_Oracle.
  4. Execute o regedit e verifique se há uma chave NLS_LANG definida em \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE. Em caso afirmativo, renomeie a chave (alterei para NLS_LANG_OLD) ou desmarque-a. Essa chave deve ser usada apenas como o valor NLS_LANG padrão para o cliente Oracle 7, portanto, é seguro removê-la, a menos que você esteja usando o cliente Oracle 7 em outro lugar. Como sempre, certifique-se de fazer backup de seu registro antes de fazer alterações.
  5. Agora, você deve poder importar cx_Oracle em seu programa Python. Veja a fonte oracle_test.py abaixo. Observe que eu tive que definir a conexão e as strings SQL como Unicode para minha versão do cx_Oracle.

Fonte:oracle_python.bat
@echo off
set ORACLE_HOME=C:\your\path\to\instantclient_11_2
set PATH=%ORACLE_HOME%;%PATH%

Fonte:oracle_test.py
import cx_Oracle

conn_str = u'user/[email protected]:port/service'
conn = cx_Oracle.connect(conn_str)
c = conn.cursor()
c.execute(u'select your_col_1, your_col_2 from your_table')
for row in c:
    print row[0], "-", row[1]
conn.close()

Possíveis problemas:
  • "ORA-12705:Não é possível acessar arquivos de dados NLS ou ambiente inválido especificado" - Eu me deparei com isso antes de fazer a alteração do registro NLS_LANG.
  • "TypeError:o argumento 1 deve ser unicode, não str" - se você precisar definir a string de conexão como Unicode.
  • "TypeError:esperando Nenhum ou uma string" - se você precisar definir a string SQL como Unicode.
  • "ImportError:falha no carregamento da DLL:o procedimento especificado não foi encontrado." - pode indicar que o cx_Oracle não pode encontrar a DLL do cliente Oracle apropriada.