DEV Community

Cover image for Conéctate a una base de datos de Oracle con Python
Leandro Ruiz
Leandro Ruiz

Posted on

Conéctate a una base de datos de Oracle con Python

Este es un tutorial muy sencillo con los primeros pasos para lograr una conexión a una base de datos de Oracle con unos pocos scripts en Python.

Comencemos.

Crea una conexión con Python

Te puedes conectar a una base de datos de Oracle usando cx_Oracle de dos diferentes maneras: de manera autónoma (dudosa traducción de standalone) o con una conexión agrupada (pooled connection en ingles).

Las conexiones autónomas son útiles cuando la aplicación necesita que un solo usuario inicie sesión en la base de datos mientras que la conexión agrupada es critica para el desempeño cuando la aplicación se conecta y desconecta de la base de datos con frecuencia.

El primer paso para conectarse es crear un modulo config.py para guardar la configuración de nuestra base de datos:

username = 'user'
password = '<password>'
dsn = 'localhost/pdborcl'
port = 1512
encoding = 'UTF-8'
Enter fullscreen mode Exit fullscreen mode

En este modulo, dsn tiene dos partes: el servidor(localhost) y la base de datos conectable (pdborcl).

Si la base de datos Oracle está en example.com, tienes que usar el siguiente dsn:

dsn = 'example.com/pdborcl'
Enter fullscreen mode Exit fullscreen mode

Crea conexiones autónomas

Para crear una conexion autonoma, usamos el metodo cx_Oracle.connect() o cx_Oracle.Connection().

El siguiente script connect.py muestra como crear una conexion a una base de datos Oracle:

import cx_Oracle
import config

connection = None
try:
    connection = cx_Oracle.connect(
        config.username,
        config.password,
        config.dsn,
        encoding=config.encoding)

    # imprime la version de la base de datos
    print(connection.version)

except cx_Oracle.Error as error:
    print(error)

finally:
    # release the connection
    if connection:
    connection.close()
Enter fullscreen mode Exit fullscreen mode

Crea conexiones agrupadas

La conexión agrupada de cx_Oracle le permite a las aplicaciones crear y mantener un grupo de conexiones a la base de datos.

Internamente, cx_Oracle implementa una conexión en grupo usando la tecnología de sesiones en grupo de Oracle. En general, cada conexión en un grupo de cx_Oracle corresponde a una sesión en la base de datos.

Para crear una conexión agrupada, se usa el método cx_Oracle.SessionPool(). El siguiente script connect_pool.py ilustra como crear este tipo de conexión:

import cx_Oracle
import config

# crea la sesion en grupo
pool = cx_Oracle.SessionPool(
    config.username,
    config.password,
    config.database,
    min=100,
    max=100,
    increment=0,
    encoding=config.encoding)

# consigue una conexion del grupo
connection = pool.acquire()

# usa la conexion
print('Using the connection')

# libera la conexion del grupo
pool.release(connection)

# cierra el grupo
pool.close()
Enter fullscreen mode Exit fullscreen mode

En caso de que se supere el número máximo de sesiones en el grupo, cuando se llame al método acquire() este producirá un error "ORA-24459: OCISessionGet() timed out waiting for pool to create new connections".

Una solución podría ser llamar al siguiente argumento:

getmode = cx_Oracle.SPOOL_ATTRVAL_WAIT to the cx_Oracle.SessionPool()
Enter fullscreen mode Exit fullscreen mode

Que logrará prevenir la excepción, pero causará que la sesión espere a que haya una conexión disponible.

Por esta razón es una practica recomendada crear un grupo con un número fijo de conexiones (es decir, que min y max tengan el mismo valor y que increment sea igual a cero).

Conclusión

Quizás en otra ocasión repasemos como realizar queries en una base de datos Oracle, pero por el momento creo que este artículo es un buen comienzo.

Espero que mi aporte te haya sido de utilidad, y ¡hasta la proxima!

Top comments (0)