debian / python: conectar a oracle con sqlalchemy

sqlalchemy es un set de herramientas SQL y un ORM (Object Relational Mapper) para python y soporta varios tipos de bases de datos como: mysql, oracle, drizzle, postgresql, etc. Podéis ver la lista completa aquí: http://www.sqlalchemy.org/docs/core/engines.html

Instalamos los paquetes necesarios:

su
aptitude install python-sqlalchemy alien libaio1
exit

Comando para saber que versión de python tenemos:

python -V

Ejemplo respuesta:

Python 2.7.2+

Para saber que versión de bases de datos tenemos ejecutamos la siguente query:

select * from product_component_version;

Ejemplo respuesta:

NLSRTL                                  11.2.0.2.0 Production
Oracle Database 11g Enterprise Edition  11.2.0.2.0 64bit Production
PL/SQL                                  11.2.0.2.0 Production
TNS for 64-bit Windows:                 11.2.0.2.0 Production

En nuestro caso usamos: python 2.7 y oracle 11.2

En la siguiente web encontraremos los paquetes necesarios de oracle para python:

http://cx-oracle.sourceforge.net/

En nuestro caso en el apartado: “Download 5.1.1 released October 10, 2011”

CentOS 5 x86_64 RPM (Oracle 11g, Python 2.7)

Para pasar los RPM-s a DEB:

su
alien -d cx_Oracle-5.1-11g-py27-1.x86_64.rpm
ls | grep .deb$
cx-oracle_5.1-2_amd64.deb

Instalamos el paquete:

dpkg -i cx-oracle_5.1-2_amd64.deb
ln -s /usr/lib/python2.7/site-packages/cx_Oracle.so /usr/lib/python2.7/dist-packages/cx_Oracle.so
exit

Creamos un script de ejemplo:

nano prueba.py

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from sqlalchemy import create_engine

connection = create_engine('oracle://USER:PASSWD@IP:PORT/DDBB').connect()

result = connection.execute("select * from product_component_version")
for v in result:
  for column, value in v.items():
    print('{0}: {1}'.format(column, value))

connection.close()

Damos permisos de ejecución al script:

chmod +x prueba.py

y lo ejecutamos:

./prueba.py

ERROR:

ImportError: /usr/lib/python2.7/dist-packages/cx_Oracle.so: undefined symbol:PyUnicodeUCS2_AsEncodedString

Para arreglar ese error lo he conseguido instalando una versión anterior, del apartado:
“Download 5.1 released March 19, 2011” el paquete:
CentOS 5 x86_64 RPM (Oracle 11g, Python 2.7)

Para desinstalar la anterior versión:

su
aptitude purge cx-oracle
rm -rf /usr/lib/python2.7/dist-packages/cx_Oracle.so
exit

y seguimos los pasos que hemos dicho anteriormente.

Ejemplo del script bien ejecutado:

product: NLSRTL
version: 11.2.0.2.0
status: Production
product: Oracle Database 11g Enterprise Edition
version: 11.2.0.2.0
status: 64bit Production
product: PL/SQL
version: 11.2.0.2.0
status: Production
product: TNS for 64-bit Windows:
version: 11.2.0.2.0
status: Production
This entry was posted in Bases de datos, Gnu / Linux, Programacion, Sistemas Operativos, Software, sysadmin and tagged , , , , , . Bookmark the permalink.

Deja un comentario

Tu dirección de correo electrónico no será publicada.