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.
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:
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
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!