BOMBOLOM.COM

(oracle) Aceder ao Oracle a partir do Python

Por Helder Guerreiro

A ligação ao Oracle a partir do python faz-se utilizado o módulo cx_Oracle. Este módulo tem de ser compilado dado que não existem binários disponíveis para o Debian. Neste artigo vou mostrar como isso se faz.

Obter o software necessário

Assim o primeiro passo consistem em fazer o download do software. Deve-se ir ao site do cx_oracle e fazer o download da última versão disponível, neste caso foi o ficheiro:

É necessário também o Software Development Kit do Instant Client do Oracle, que deve ser obtido no mesmo sítio onde se obtiveram os pacotes instantclient-basic* e o instantclient-sqlplus*:

Para este artigo fiz o download do ficheiro:

Preparar, compilar e instalar o cx_Oracle

O que interessa deste ficheiro são os header files (ficheiros terminados em .h) que estão disponíveis na directoria include. Como poderemos no futuro querer fazer o upgrade do cx_Oracle, vamos instalar este ficheiros para dentro de /opt/oracle:

$ cd /tmp
$ unzip instantclient-sdk-linux32-11.1.0.7.zip
Archive:  instantclient-sdk-linux32-11.1.0.7.zip
   creating: instantclient_11_1/sdk/
   creating: instantclient_11_1/sdk/include/
  inflating: instantclient_11_1/sdk/include/occi.h
  [ ...etc... ]
# cd /tmp/instantclient_11_1
# mv sdk /opt/oracle

Notar que o sdk tem mesmo de ficar dentro da directoria /opt/oracle já que o script de compilação do cx_Oracle espera encontrar essa directoria em $ORACLE_HOME/sdk .

Por qualquer motivo as bibliotecas do cliente oracle não trazem os links simbolicos necessários para a compilação do cx_oracle funcionar. Temos pois de fazer:

# cd /opt/oracle/lib
# ln -s libclntsh.so.11.1 libclntsh.so
# ln -s libocci.so.11.1 libocci.so

A seguir devemos descomprimir o ficheiro cx_Oracle-5.0.2.tar.gz:

$ cd /tmp
$ tar -xzvf cx_Oracle-5.0.2.tar.gz

Como root fazer:

# export ORACLE_HOME=/opt/oracle
# cd /tmp/cx_Oracle-5.0.2
# python setup.py install
[ ... ]
Installed /usr/lib/python2.5/site-packages/cx_Oracle-5.0.2-py2.5-linux-i686.egg
Processing dependencies for cx-Oracle==5.0.2
Finished processing dependencies for cx-Oracle==5.0.2

Testar a instalação

Temos agora apenas que fazer:

$ python
Python 2.5.4 (r254:67916, Feb 17 2009, 20:16:45)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>> db = cx_Oracle.connect('user/password@orbd')
>>> cursor = db.cursor()
>>> cursor.execute('select count(*) from tabela_de_teste')
<__builtin__.OracleCursor on <cx_Oracle.Connection to user@ordb>>
>>> result = cursor.fetchall()
>>> print "Nº de linhas:", cursor.rowcount
Nº de linhas:
>>> print result[0][0]
2128
>>> cursor.close()

O 2128 é o númeo de linhas na tabela tabela_de_teste. Temos a nossa ligação ao Oracle, a partir do python a funcionar!

18.06.2009 | Ler mais | Comentários | Tags ,

Voltar à Página principal | Made with PyBlosxom