Archivo para 2/10/11

PySQL: Un sqlplus mejor que sqlplus

Me gustan los clientes graficos SQL (Ejemplo: Dbeaver o Squirrel) pero no siempre podemos usarlos, y tenemos que usar un cliente de consola. En el caso de Oracle, el amo es “sqlplus”, muchas veces “amado” u “odiado” por otros. Pero si usas Python, Oracle y tienes instalado cx_Oracle (ver entrada anterior) tu experiencia puede ser mas agradable si usas PySQL (como siempre, cuestion de gustos). PySQL es un interprete de comandos para Oracle que puede ser un reemplazo completo de SQLPlus.

Para instalarlo, descargate los fuentes, descomprimelos y al igual que la instalacion de otros modulos para python:

$ sudo python setup.py install

Despues ya podremos ejecutar:

$ pysql <user>/<pass>@<servicio> para conectar

Enlace | Pantallazos | Lxnet

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

#!/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

Conexion a Oracle desde Python
Documentación de cx_Oracle
Instalar cx_Oracle en Ubuntu y dos
Como conectarse a Oracle desde Python

Relacionado:

Instalar Oracle XE en Ubuntu

Instalar Oracle XE en Ubuntu

Iba a actualizar la entrada de como instalar Oracle pero he comprobado que mi entrada anterior de como instalar Oracle no ha envejecido mal, vamos, que es completamente aprovechable (salvando pequeños matices). Además tambien podemos obtener más información desde la web de Ubuntu.





¿Es compatible tu equipo con Ubuntu?


( Muchos fondos de pantalla, aqui )

DESCARGATE SCIFI LIFE

365 Dias de Soledad
Me debes los sueños, las promesas y las noches rotas. Me debes la paz, la sonrisa y la esperanza robadas. Me debes la sangre, las lágrimas y el sudor vertido. Me debes las noches vacías, los abrazos anhelados. Me debes un beso de ajenjo de tu amarga boca.

The Ubuntu Counter Project - user number # 11961
Geo Visitors Map
octubre 2011
L M X J V S D
« Sep   Nov »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Blog Stats

  • 30,307,628 hits