Header Ads Widget

Responsive Advertisement

Conectar a Oracle desde Python (incluye compilación de cx_Oracle)

La conexion a una base de datos Oracle desde python se simplifica mucho si utilizamos un modulo como cx_Oracle. En el siguiente tutorial veremos los pasos para instalarlo y un breve ejemplo de conexión. Nota: en la pagina de cx_Oracle ya hay versiones precompiladas para Windows y Red hat, de manera que si utilizamos esas plataformas podriamos instalar el modulo directamente, de todas formas en este tutorial se comentara el caso desde 0.
INSTALACION DE CX_ORACLE
Si estamos utilizando un servidor de Oracle (como en el post anterior) no es necesario la instalación de un cliente de Oracle, pues ya va incluido, En otro caso tenemos que crearnos una cuenta en Oracle y descargarnos el cliente de Oracle.
En mi caso y en este ejemplo probe descargando la version ORACLE 11 para Linux 32. Son varios ficheros, debes descargarte aquellos ficheros que contienen en su nombre: basic, sdk y sqlplus. Los pasos ahora son simples:
– Descomprime los ficheros: basic , sdk y sqlplus
copia la carpeta que se crea a /etc/oracle/instant_client_11_2
Dentro crea las siguientes ligaduras:
# ln -s libclntsh.so.11.1 libclntsh.so
# ln -s libclntsh.so.11.1 libclntsh.dylib
si no creas estos enlaces, luego al intentar compilar cx_Oracle dara un error: /usr/bin/ld: cannot find -lclntsh
Ahora tenemos que actualizar las referencias a la libreras compartidas. Creamos el fichero /etc/ld.so.conf.d/oracle.conf con la siguiente línea:
/opt/oracle/instantclient_11_2
Y actualizamos:
ldconfig
si usas oracle server XE en cambio basta con insertar esta linea en este fichero:
root@ubuntu:~# cat /etc/ld.so.conf
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib
Y ejecutar tambien ldconfig (nota, en vez de 10.2.0 usa la version que hayas instalado).
Ahora insertamos en el profile del usuario y tambien como root (a la hora de compilar) ejecutamos:
export ORACLE_HOME="/opt/oracle/instantclient_11_2"
export DYLD_LIBRARY_PATH="$ORACLE_HOME"
export SQLPATH="$ORACLE_HOME"
export PATH="$PATH:$ORACLE_HOME"
Ya nos queda menos. antes de compilar “cx_Oracle” instalamos dependencias necesarias:
sudo apt-get install python-dev python-setuptools build-essential
Para evitarnos tambien el: libaio.so.1: cannot open shared object file: No such file or directory a la hora de ejecutar cx_Oracle
instalamos tambien la siguiente dependencia:
apt-get install libaio-dev
y ahora si, ya podemos compilarlo (para ello nos descargamos y compilamos los fuentes con pip):
apt-get install python-pip
pip install cx_Oracle
si todo es correcto podemos probar a importarlo desde python para comprobar que funciona:
$ python
$ import cx_Oracle
$ exit()
No deberia dar ningun error.
jose@ubuntu:~$ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>> exit()
Probando la conexion a ORACLE
Escribimos por ejemplo el siguiente codigo:
jose@ubuntu:~$ cat ORACLE.py
1
2
3
4
5
6
7
8
9
#!/usr/bin/python
import cx_Oracle
conn_str='HR/HR@127.0.0.1:1521/XE'
db_conn = cx_Oracle.connect(conn_str)
cursor = db_conn.cursor()
cursor.execute('SELECT * FROM countries')
registros = cursor.fetchall()
for r in registros:
  print str(r)
Que basicamente se conecta a la base de datos Oracle XE con el usuario HR, password HR que tenemos instalada en Local (si quieres conectar a otra base de datos Oracle cambia la cadena de conexion como corresponda) y ejecuta un select de la tabla Countries.
 
Consultando el API de cx_Oracle podremos obtener mas información de como ejecutar otro tipo de operaciones como insert, updates o deletes. Para ello recomiendo consultar los enlaces siguientes:
Enlaces sobre cx_ORACLE
Relacionado:
Referencia:

Publicar un comentario

0 Comentarios

Mejorando Rendimiento de Odoo - BIG DATA