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.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.