Instalación Oracle ODBC en Apple Silicon
En este tutorial, aprenderás cómo instalar y configurar Oracle Instant Client y ODBC en dispositivos Apple Silicon, como el M1.
Vamos a descargar los archivos necesarios, configurar las variables de entorno, instalar unixODBC
como Driver Manager, y finalmente conectar Python a una base de datos Oracle utilizando cx_Oracle
.
Sigue los pasos detallados a continuación para completar la instalación y configuración correctamente.
En primer lugar hay que descargar Oracle Instant Client y OBDC.
Para instalarlos, hay que abrir los archivos .dmg
, lo cual lo monta en /Volumes
y entrar vía terminal a la carpeta y ejecutar el script install_ic.sh
. Acto seguido puedes desmontar la imagen del Finder, saliendo anteriormente de la terminal.
Ahora, moveremos los archivos a /usr/local/oracle/instantclient_23_3
:
sudo mv $HOME/Downloads/instantclient_23_3 /usr/local/oracle/instantclient_23_3
Y añadiremos las variables de entorno a .zshrc
:
export PATH=/usr/local/oracle/instantclient_19_8:$PATH
export DYLD_LIBRARY_PATH=/usr/local/oracle/instantclient_19_8:$DYLD_LIBRARY_PATH
export TNS_ADMIN=/usr/local/oracle/instantclient_19_8/network/admin
source ~/.zshrc
Debes instalar unixODBC
, que es un Driver Manager para ODBC. Puedes hacerlo utilizando Homebrew:
brew install unixodbc
Ahora, debes crear un archivo odbcinst.ini
en /usr/local/etc
con el siguiente contenido:
[Oracle 23 ODBC driver]
Description = Oracle ODBC driver for Instant Client 23
Driver = /usr/local/oracle/instantclient_23_3/libsqora.dylib.23.1
Y un archivo odbc.ini
en el directorio de usuario con el siguiente contenido:
[OracleODBC]
Driver = /usr/local/oracle/instantclient_23_3/libsqora.dylib.23.1
Server = your_oracle_server
UID = your_username
PWD = your_password
Instala el paquete cx_Oracle usando pip
pip install cx_Oracle
Conexión a la base de datos
import cx_Oracle
import sys
from datetime import date, datetime
# Configura tu conexión
dsn = cx_Oracle.makedsn('your_oracle_server', 1521, sid='your_sid')
username = 'your_username'
password = 'your_password'
# Conectarse a la base de datos
try:
connection = cx_Oracle.connect(user=username, password=password, dsn=dsn)
cursor = connection.cursor()
# Ejecutar una consulta
cursor.execute("SELECT * FROM your_table")
# Obtener resultados
for row in cursor.fetchall():
print(row)
except cx_Oracle.DatabaseError as e:
error, = e.args
print(f"Error code: {error.code}")
print(f"Error message: {error.message}")
finally:
# Cerrar la conexión
if cursor:
cursor.close()
if connection:
connection.close()